【问题标题】:notifyDataSetChanged removes last viewnotifyDataSetChanged 删除最后一个视图
【发布时间】:2015-06-26 11:15:23
【问题描述】:

我使用 Base Adapter 填充 ListView,当我从列表中删除一个项目并调用 adapter.notifyDataSetChanged 时,它总是删除最后一个视图。当我从其他帖子中读到它而不是删除最后一个视图时,它可能会隐藏最后一个视图,因为列表计数减少了 1。 谁能帮我显示所需的内容。

这是我的适配器类

public class ListOfFav extends BaseAdapter {

    TextView qid,ques,category;
    ArrayList<HashMap<String,String>> flightArray=new ArrayList<HashMap<String,String>>();

    private static final String TAG_QID = "qid";
    private static final String TAG_QUES = "question";
    private static final String TAG_CAT= "category";
    Context context;
    ListOfFav() {
    }

    public ListOfFav(ArrayList<HashMap<String,String>> flightList,Context c){
        Log.v("Constructor", String.valueOf(flightArray.size()));
        flightArray=flightList;
        context=c;
    }


    public int getCount() {
        // TODO Auto-generated method stub
        return flightArray.size();
    }

    public Object getItem(int arg0) {

        // TODO Auto-generated method stub
        return null;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

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

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row;
        if(convertView==null||convertView.getTag()==null)
             row = inflater.inflate(R.layout.list_questions_main, parent, false);

        else
            row=convertView;

            qid=(TextView)row.findViewById(R.id.tQid);
            ques= (TextView) row.findViewById(R.id.tQuestion);
            category = (TextView) row.findViewById(R.id.tCategory);

            qid.setText(flightArray.get(position).get(TAG_QID));
            ques.setText(flightArray.get(position).get(TAG_QUES));
            category.setText(flightArray.get(position).get(TAG_CAT));

            return (row);
    }
}

我将其更新为:

for (HashMap<String, String> map : FavoriteList) {
        if (map.get(TAG_QID).equals(t.getText().toString())) 
            {
                 FavoriteList.remove(i);
                 favAdapter.notifyDataSetChanged();
                 break;
            }
        i++;
 }

【问题讨论】:

  • 提供完整代码,去掉没有完整代码的功能代码。但是根据您的描述,您似乎总是从 FavoriteList 中删除最后一个项目,这就是它总是删除最后一个视图的原因。
  • 不,我不会一直删除最后一项。我在数组列表中找到 id 并删除相应的项目
  • 您究竟是如何删除视图的?类或适配器中任何按钮的 onClick 事件..
  • 通过滑动并选择Adapter视图的一项。需要提供完整的方法吗?
  • 在您的方法中,您有FavouriteList.remove(i),但i 设置在哪里?您正在使用 for each 循环,那么 i 在到达该语句之前是否可能设置为列表末尾的位置?

标签: android performance listview android-adapter


【解决方案1】:

我通过在通知数组适配器与之关联的列表已更改(即通过刷新列表视图适配器)后调用 FavouriteListView.setAdapter(favAdapter) 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多