【问题标题】:Android notifyDataSetChanged() exampleAndroid notifyDataSetChanged() 示例
【发布时间】:2014-07-03 16:11:56
【问题描述】:

谁能给我一个示例教程或指导我在我的适配器中使用notifyDataSetChanged() 吗?我正在从数据库中获取数据并填充我的列表视图。同样在我的列表视图中,我有一个按钮来喜欢那个特定的内容,我的数据库值将在该内容上更新,并且按钮文本将更改为“喜欢”。但我不确定如何使用数据库中的数据再次刷新我的列表视图。

【问题讨论】:

  • 你试过用吗?只需在您的数据更改时调用该方法即可。
  • 我试过了,但我的值没有更新。我已将我的问题作为一个更详细的问题here

标签: android android-listview notifydatasetchanged


【解决方案1】:

编辑:

为适配器中的数组列表创建自定义类

public class Entity   {
int id;
variables ..........
boolean isLiked = false;

public Entity(some values){
  // set the id;
  variables = values ;
}
public void setLiked(boolean like){
   this.isLiked = like; 
   // you must update database here
 }
public boolean IsLiked(){ return this.isLiked; } 

}

创建自定义适配器

public class EntityAdapter extends ArrayAdapter<Entity> { 
.................................
........other methods............
.................................

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

    final Entity entity = arrayList.get(position);

    final ViewHolder holder;
    View view = convertView;
     if (view == null) {

        int layoutCode=this.layoutcode;


        view = ((Activity) context).getLayoutInflater().inflate(layoutCode, parent, false);

        holder = new ViewHolder();
        assert view != null;


        holder.chkLike=(CheckBox) view.findViewById(R.id.chkLike);

        view.setTag(holder);
     } else {
        holder = (ViewHolder) view.getTag();
     }


    holder.chkLike.setChecked(entity.IsLiked()); 

    return view;
}
class ViewHolder { 
    CheckBox chkLike;
}
}

主要活动

public class Main extends Activity{
    EntityAdapter adapter;
    GridView gridView  = null;


   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
       ArrayList<Entity> arraylist = EntityHelper.fetch("select * from entity",this);


      adapter = new EntityAdapter(this, R.layout.item_grid_image, arraylist);


       gridView.setAdapter(adapter);

     gridView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {

             adapter.getItem(pos).setLiked(true);
             adapter.notifyDataSetChanged();


        }


    });
}

【讨论】:

  • 我刚刚查看了教程。我还检查了其他类似的教程。所有教程都在解释 Notifydatasetchanged() 与来自 java 代码内部的一些字符串数组。就我而言,我正在从数据库中获取数据,这就是我在使用 Notifydatasetchanged() 时遇到问题的地方。有没有这样的使用数据库的教程??
  • 在所有教程中,当新项目添加到列表中时,都会使用 Notifydatasetchanged()。但就我而言,我正在更新当前列表的现有数据并尝试刷新列表,但由于某种原因它不会发生。
猜你喜欢
  • 2011-04-09
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2016-05-03
相关资源
最近更新 更多