繁体   English   中英

为什么notifyDataSetChanged()在我的代码中不起作用?

[英]why is notifyDataSetChanged() not working in my code?

为什么我的代码不起作用? 我已经尝试使用notifyDataSetChanged()或对列表视图使用invalid(),或者对适配器再次使用.setAdapter(),但是它仍然无法正常工作,请帮助我。 公共类ListDel扩展了活动{

ListView mylist_del;
ListViewAdapter listViewAdapter_del;
TypedArray images_del;
ImageView bin_image;

private static String[] names, ages;
storageListImplementation lists = new storageListImplementation();

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.del_layout);

    names = lists.getNames();
    ages = lists.getAges();
    images_del = getResources().obtainTypedArray(R.array.icons);
    bin_image = (ImageView)findViewById(R.id.del_image_icon);

    listViewAdapter_del = new ListViewAdapter(this);
    mylist_del = (ListView)findViewById(R.id.listview_delete);
    mylist_del.setAdapter(listViewAdapter_del);

}

private class ListViewAdapter extends BaseAdapter{
    private LayoutInflater mInflater;

    public ListViewAdapter(Context context){
        mInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return names.length;
    }

    public Object getItem(int pos) {
        return pos;
    }

    public long getItemId(int position) {
        return position;
    }

    private OnClickListener binClick(ImageView img, final int position, String name) {

        return new View.OnClickListener(){
            public void onClick(View v) {
                lists.del(names[position]);
                mylist_del.invalidate();
                //mylist_del.setAdapter(listViewAdapter_del);
                listViewAdapter_del.notifyDataSetInvalidated();
                listViewAdapter_del.notifyDataSetChanged();                 

                //newlistviewadap();
                //mylist_del.setAdapter(new ListViewAdapter(this));
                //listViewAdapter_del.notifyDataSetChanged();
                //String addSuccessful = "You have successfully deleted "+names[position]+" and his/her information in you database";
                //Toast.makeText(getApplicationContext(), addSuccessful, Toast.LENGTH_LONG).show();

                //ListDel.this.finish();
            } 
        };
    }

    public void newlistviewadap(){

        mylist_del.setAdapter(listViewAdapter_del);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder textView;
        if(convertView==null){
            convertView = mInflater.inflate(R.layout.del_listview_row, null);
            textView = new ViewHolder();
            textView.text = (TextView) convertView.findViewById(R.id.del_values_row);
            textView.age = (TextView) convertView.findViewById(R.id.del_age_row);
            textView.image = (ImageView) convertView.findViewById(R.id.del_image);
            textView.delbutton = (ImageView) convertView.findViewById(R.id.del_image_icon);
            convertView.setTag(textView);
        }else{
            textView = (ViewHolder) convertView.getTag();
        }

        textView.text.setText(names[position]);
        textView.age.setText(ages[position]);

        textView.image.setImageDrawable(images_del.getDrawable(position));
        textView.delbutton.setOnClickListener(binClick( textView.delbutton, position, names[position]));
        return convertView;
    }

}

static class ViewHolder{
    TextView text;
    TextView age;
    ImageView image;
    ImageView delbutton;
}

}

尝试移除

listViewAdapter_del.notifyDataSetInvalidated();

调用它后,mylist_del将不会从listViewAdapter_del中检索更多数据,因此仅保留以下代码,然后重试:

lists.del(names[position]);
listViewAdapter_del.notifyDataSetChanged();  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM