Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在单击listview上的项目时刷新listview_Android_Android Layout_Android Listview - Fatal编程技术网

Android 如何在单击listview上的项目时刷新listview

Android 如何在单击listview上的项目时刷新listview,android,android-layout,android-listview,Android,Android Layout,Android Listview,我有一个从arrayadapter扩展的自定义适配器: @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { LayoutInflater vi = (LayoutInflater) getContext().getSystemService(

我有一个从arrayadapter扩展的自定义适配器:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final ViewHolder holder;

    if (convertView == null) {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        convertView = vi.inflate(R.layout.list_item, null);

        holder = new ViewHolder();
        holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
        holder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
        holder.ivItem = (ImageView) convertView.findViewById(R.id.ivItem);
        holder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
        holder.ivArrow = (ImageView) convertView.findViewById(R.id.ivArrow);

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.tvName.setText(item.get(position).getName());
    holder.tvPrice.setText(item.get(position).getPrice());
    holder.ivItem.setImageBitmap(item.get(position).getAvatar());
    holder.ivArrow.setImageDrawable(item.get(position).getArrow());
    holder.ivIcon.setImageDrawable(item.get(position).getIcon());


            holder.ivIcon.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

        /*...My code...*/
    }
    });

    return convertView;
}
我尝试单击项目
ivIcon
,一行
listview
将被删除,
listview
应该刷新,但我没有办法刷新listview。我需要帮助

您的选择是:

  • 使用ArrayAdapter的功能修改基础列表(添加、插入、删除、清除等)
  • 使用新列表数据重新创建ArrayAdapter。(使用大量资源和垃圾收集。)
  • 创建从BaseAdapter和ListAdapter派生的自己的类,该类允许更改基础列表数据结构
  • 每次更新列表时使用notifyDataSetChanged。要在UI线程上调用它,请使用活动的runOnUiThread方法。然后notifyDataSetChanged将起作用
范例

final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
runOnUiThread(new Runnable() {

    public void run() {
        adapter.notifyDataSetChanged();
    }
});

此代码将帮助您

假设您的适配器类似于

 ListView = listview;
 customListView mcustomListView = new customListView(this);
当您在getView中单击列表项时

 holder.ivIcon.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

         customListView  mcustomListView = (customListView ) mlvItem.getAdapter();
mcustomListView .notifyDataSetChanged();

      }
  }

例如,我必须使用线程在列表更改时进行更新?无法在getView()中刷新适配器?我正在尝试重命名ListView中的文件名,但它不会更新,除非我离开活动并再次返回。有什么想法吗?