Android 如何使用arrayadapter和notifyDataSetChanged删除ListView项

Android 如何使用arrayadapter和notifyDataSetChanged删除ListView项,android,listview,android-arrayadapter,imagebutton,Android,Listview,Android Arrayadapter,Imagebutton,我有列表视图,我正在其中设置图像视图、2文本视图和2图像按钮图像按钮用于添加和删除列表项。 这是我的密码 Helper.java import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; . . . import com.example.customObject.ContactBean; import com.e

我有
列表视图
,我正在其中设置
图像视图
、2
文本视图
和2
图像按钮
<代码>图像按钮用于添加和删除列表项。
这是我的密码

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;
    }
}
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;
    }
}
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
.
.
.
导入com.example.customObject.ContactBean;
导入com.example.helper.HelperAdaptor;
导入com.example.helper.ImageHelper;
公共类帮助程序扩展活动实现了McClickListener{
私有列表=新的ArrayList();
私有列表视图列表视图;
私人按钮添加辅助程序;
公共助手适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u助手);
listView=(listView)findViewById(R.id.lstview\u helper\u helperlist);
setOnItemClickListener(this);
add\u helper=(按钮)findViewById(R.id.btn\u helper\u addhelper);
添加\u helper.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(getApplicationContext(),
ContactListActivity.class);
startActivityForResult(意图,选择联系人);
}
});
}
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
if(resultCode==RESULT\u OK){
if(requestCode==选择_联系人){
ContactBean objContact=新ContactBean();
setName(helperName);
setPhoneNo(helperNumber);
setPic(图像);
list.add(objContact);
objAdapter=新的helperAdapter(Helper.this,
R.layout.activity\u helper\u行,列表);
setAdapter(objAdapter);
}
}
}
@凌驾
公共单击(AdapterView列表视图、视图v、内部位置、,
长id){
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.helper,menu);
返回true;
}
}
HelperAdapter.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;
    }
}
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;
    }
}
导入android.view.view.OnClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.ImageButton;
导入android.widget.ListView;
.
.
.
导入com.example.customObject.ContactBean;
导入com.example.helpmerestart.ContactListActivity;
导入com.example.helpmerestart.R;
公共类HelperAdapter扩展了ArrayAdapter{
私人活动;
私人清单项目;
私人int row;
私有联系人bean objBean;
私人持票人;
私有int项索引;
私人视野;
公共HelperAdapter(活动法,整数行,列表项){
超级(行动、行、项目);
这个活动=行动;
this.row=行;
这个项目=项目;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图=转换视图;
itemIndex=位置;
如果(视图==null){
LayoutFlater充气机=(LayoutFlater)活动
.getSystemService(上下文布局\充气机\服务);
视图=充气机。充气(行,空);
holder=新的ViewHolder();
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
if((items==null)| |((position+1)>items.size())
返回视图;
objBean=items.get(位置);
holder.add=(ImageButton)view.findViewById(R.id.btn\u helper\u add);
holder.remove=(ImageButton)view.findViewById(R.id.btn\u helper\u 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(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
addHelper();
}
});
holder.remove.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
删除(itemIndex);
//正在尝试在此处调用notifyDataSetChanged()
}
}
);
返回视图;
}
public void addHelper(){
意向意向=新意向(activity.getApplicationContext(),
ContactListActivity.class);
活动。startActivityForResult(意图,选择联系人);
holder.add.setClickable(假);
支架。移除。可点击设置(真);
}
公共类视图持有者{
公共文本视图tvname,tvPhoneNo;
公众影像资料;
公共图像按钮添加、删除;
}
}
问题是我无法删除单击了“删除”按钮的listItem。你可以参考了解我到底想要什么。我试图在remove按钮的onClick()中调用notdifyDataSetChanged(),但不知道如何操作。

我可以通过任何其他方法来实现我的目标,我都会被告知。
问候..

Sourabh

您使用ArrayAdapter的方式错误。不要保留您自己的项目列表(私人列表项目),请