簡體   English   中英

如何使用arrayadapter和notifyDataSetChanged刪除ListView項目

[英]How to remove ListView Item using arrayadapter and notifyDataSetChanged

我有ListView ,我在其中設置ImageView ,2 TextView和2 ImageButton ImageButtons用於添加和刪除listItem。
這是我的代碼...

Helper.java

import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
.
.
.
import com.example.customObject.ContactBean;
import com.example.helper.HelperAdaptor;
import com.example.helper.ImageHelper;

public class Helper extends Activity implements OnItemClickListener {
    private List<ContactBean> list = new ArrayList<ContactBean>();
    private ListView listView;
    private Button add_helper;
    public HelperAdaptor objAdapter ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_helper);

        listView = (ListView) findViewById(R.id.lstview_helper_helperlist);
        listView.setOnItemClickListener(this);
        add_helper = (Button) findViewById(R.id.btn_helper_addhelper);
        add_helper.setOnClickListener(new OnClickListener() {           
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),
                        ContactListActivity.class);
                startActivityForResult(intent, SELECT_CONTACT);
            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_CONTACT) {

                ContactBean objContact = new ContactBean();
                objContact.setName(helperName);
                objContact.setPhoneNo(helperNumber);
                objContact.setPic(image);
                list.add(objContact);
                objAdapter = new HelperAdaptor(Helper.this,
                        R.layout.activity_helper_rows, list);
                listView.setAdapter(objAdapter);

            }
        }
    }

    @Override
    public void onItemClick(AdapterView<?> listview, View v, int position,
            long id) {
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.helper, menu);
        return true;
    }
}

HelperAdapter.java

import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
.
.
.
import com.example.customObject.ContactBean;
import com.example.helpmerestart.ContactListActivity;
import com.example.helpmerestart.R;

public class HelperAdaptor extends ArrayAdapter<ContactBean> {

    private Activity activity;
    private List<ContactBean> items;
    private int row;
    private ContactBean objBean;
    private ViewHolder holder;
    private int itemIndex;
    private View view;

    public HelperAdaptor(Activity act, int row, List<ContactBean> items) {
        super(act, row, items);

        this.activity = act;
        this.row = row;
        this.items = items;

    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        view = convertView;
        itemIndex = position;
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(row, null);

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

        if ((items == null) || ((position + 1) > items.size()))
            return view;

        objBean = items.get(position);

        holder.add = (ImageButton) view.findViewById(R.id.btn_helper_add);
        holder.remove = (ImageButton) view.findViewById(R.id.btn_helper_remove);

        if (holder.tvname != null && null != objBean.getName()
                && objBean.getName().trim().length() > 0) {
            holder.tvname.setText(Html.fromHtml(objBean.getName()));
        }
        if (holder.tvPhoneNo != null && null != objBean.getPhoneNo()
                && objBean.getPhoneNo().trim().length() > 0) {
            holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo()));
        }
        if (holder.profilepic != null && null != objBean.getPic()) {
            holder.profilepic.setImageBitmap(objBean.getPic());
        }

        holder.add.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                addHelper();
            }

        });
        holder.remove.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                items.remove(itemIndex); 
    //trying to call notifyDataSetChanged() here

            }
        }

        );
        return view;
    }

    public void addHelper() {
        Intent intent = new Intent(activity.getApplicationContext(),
                ContactListActivity.class);
        activity.startActivityForResult(intent, SELECT_CONTACT);
        holder.add.setClickable(false);
        holder.remove.setClickable(true);
    }



    public class ViewHolder {
        public TextView tvname, tvPhoneNo;
        public ImageView profilepic;
        public ImageButton add, remove;
    }
}

問題是我無法刪除單擊了刪除按鈕的listItem。 您可以參考上一篇文章以了解我到底想要什么。 我試圖在刪除按鈕的onClick()中調用notdifyDataSetChanged(),但沒有得到如何做。

我可以通過其他任何方法來實現自己的目標。
問候..
蘇拉卜

您以錯誤的方式使用ArrayAdapter。 不要保留自己的項目列表(私有列表項目),因為ArrayAdapter里面有它自己的項目列表。 要向listView添加和刪除項目,請使用ArrayAdapter的add / addAll和remove方法。 如果希望項目正常運行,則應始終使用ArrayAdapters方法來管理項目。

如果不需要ArrayAdapter的功能,請擴展BaseAdapter。

PS另外,您對itemIndex / holder變量有疑問。 PPS您使用Holder的方式錯誤。 (findViewByIds在每個getView調用中執行)

您的代碼中有很多錯誤...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM