android中每行带有添加和删除按钮的ListView
我正在开发一个android应用程序,其中我制作了一个ListView。我必须为ListView中的每一行添加2个按钮。这两个按钮是“添加”和“删除”。当用户选择其中一个按钮时,应采取一些措施。我该怎么做?android中每行带有添加和删除按钮的ListView,android,android-listview,add,Android,Android Listview,Add,我正在开发一个android应用程序,其中我制作了一个ListView。我必须为ListView中的每一行添加2个按钮。这两个按钮是“添加”和“删除”。当用户选择其中一个按钮时,应采取一些措施。我该怎么做?公共类用户自定义适配器扩展ArrayAdapter{ public class UserCustomAdapter extends ArrayAdapter<User> { Context context; int layoutResourceId; ArrayList<
公共类用户自定义适配器扩展ArrayAdapter{
public class UserCustomAdapter extends ArrayAdapter<User> {
Context context;
int layoutResourceId;
ArrayList<User> data = new ArrayList<User>();
public UserCustomAdapter(Context context, int layoutResourceId,
ArrayList<User> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
UserHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserHolder();
holder.textName = (TextView) row.findViewById(R.id.textView1);
holder.textAddress = (TextView) row.findViewById(R.id.textView2);
holder.textLocation = (TextView) row.findViewById(R.id.textView3);
holder.btnEdit = (Button) row.findViewById(R.id.button1);
holder.btnDelete = (Button) row.findViewById(R.id.button2);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
User user = data.get(position);
holder.textName.setText(user.getName());
holder.textAddress.setText(user.getAddress());
holder.textLocation.setText(user.getLocation());
holder.btnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("Edit Button Clicked", "**********");
Toast.makeText(context, "Edit button Clicked",
Toast.LENGTH_LONG).show();
}
});
holder.btnDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("Delete Button Clicked", "**********");
Toast.makeText(context, "Delete button Clicked",
Toast.LENGTH_LONG).show();
}
});
return row;
}
static class UserHolder {
TextView textName;
TextView textAddress;
TextView textLocation;
Button btnEdit;
Button btnDelete;
}
}
语境;
国际布局资源;
ArrayList数据=新的ArrayList();
public UserCustomAdapter(上下文上下文,int-layoutResourceId,
ArrayList数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
UserHolder=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新用户holder();
holder.textName=(TextView)row.findViewById(R.id.textView1);
holder.textAddress=(TextView)row.findViewById(R.id.textView2);
holder.textLocation=(TextView)row.findViewById(R.id.textView3);
holder.btnEdit=(按钮)行.findViewById(R.id.button1);
holder.btnDelete=(按钮)行.findViewById(R.id.button2);
row.setTag(支架);
}否则{
holder=(UserHolder)row.getTag();
}
User=data.get(位置);
holder.textName.setText(user.getName());
holder.textAddress.setText(user.getAddress());
holder.textLocation.setText(user.getLocation());
holder.btnEdit.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Log.i(“单击编辑按钮”,“*******”);
Toast.makeText(上下文,“单击编辑按钮”,
Toast.LENGTH_LONG).show();
}
});
holder.btnDelete.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Log.i(“单击删除按钮”,“*******”);
Toast.makeText(上下文,“单击删除按钮”,
Toast.LENGTH_LONG).show();
}
});
返回行;
}
静态类用户持有者{
文本视图文本名称;
文本视图文本地址;
文本视图文本位置;
按钮btnEdit;
按钮btnDelete;
}
}
嘿,请坐
我在我的博客上有相同的答案。关于删除按钮单击事件
public void delete(View v){
ListView listview1;
ArrayList<E> datalist;
final int position = listview1.getPositionForView((View) v.getParent());
datalist.remove(position);
myAdapter.notifyDataSetChanged();
}
publicsvoid删除(视图v){
列表视图列表视图1;
ArrayList数据表;
final int position=listview1.getPositionForView((视图)v.getParent());
数据列表。删除(位置);
myAdapter.notifyDataSetChanged();
}
首先需要创建一个自定义布局xml,它将表示列表中的单个项目。您将向该布局添加两个按钮以及要从列表中显示的任何其他项目
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/list_item_string"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:paddingLeft="8dp"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:text="Delete" />
<Button
android:id="@+id/add_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/delete_btn"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="Add" />
</RelativeLayout>
接下来,您需要创建一个自定义的ArrayAdapter类,用于扩展xml布局,以及处理按钮和单击事件
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private Context context;
public MyCustomAdapter(ArrayList<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
return list.get(pos).getId();
//just return 0 if your list items do not have an Id variable.
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.my_custom_list_layout, null);
}
//Handle TextView and display string from your list
TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);
listItemText.setText(list.get(position));
//Handle buttons and add onClickListeners
Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
Button addBtn = (Button)view.findViewById(R.id.add_btn);
deleteBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//do something
list.remove(position); //or some other task
notifyDataSetChanged();
}
});
addBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//do something
notifyDataSetChanged();
}
});
return view;
}
}
公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{
private ArrayList list=new ArrayList();
私人语境;
公共MyCustomAdapter(ArrayList列表,上下文){
this.list=列表;
this.context=上下文;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int pos){
返回列表。获取(pos);
}
@凌驾
公共长getItemId(int pos){
return list.get(pos.getId();
//如果列表项没有Id变量,只需返回0。
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图=转换视图;
如果(视图==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.my\u custom\u list\u layout,null);
}
//处理列表中的文本视图和显示字符串
TextView listItemText=(TextView)view.findViewById(R.id.list\u item\u string);
listItemText.setText(list.get(position));
//处理按钮并添加onClickListeners
Button deleteBtn=(Button)view.findviewbyd(R.id.delete_btn);
Button addBtn=(Button)view.findviewbyd(R.id.add\u btn);
deleteBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//做点什么
list.remove(position);//或其他任务
notifyDataSetChanged();
}
});
addBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//做点什么
notifyDataSetChanged();
}
});
返回视图;
}
}
最后,在活动中,可以实例化自定义ArrayAdapter类并将其设置为listview
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_activity);
//generate list
ArrayList<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
//instantiate custom adapter
MyCustomAdapter adapter = new MyCustomAdapter(list, this);
//handle listview and assign adapter
ListView lView = (ListView)findViewById(R.id.my_listview);
lView.setAdapter(adapter);
}
公共类MyActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u my\u activity);
//生成列表
ArrayList=新建ArrayList();
列表。添加(“第1项”);
列表。添加(“第2项”);
//实例化自定义适配器
MyCustomAdapter=新的MyCustomAdapter(列表,此);
//处理listview并分配适配器
ListView lView=(ListView)findViewById(R.id.my\u ListView);
lView.setAdapter(适配器);
}
希望这有帮助!使用自定义listview布局,在项目视图中添加两个按钮,并在相应的单击事件上写入操作。我的listview已准备就绪。我只需在每行中添加两个按钮。我没有清楚地了解您的代码。只需像其他textview一样在您的行中添加两个按钮,\u layout.xml并使用其id调用它们。。并像me-holder.btnDelete.setOnClickListener一样设置onclick listner(新的OnClickListener(){@Override public void onclick(视图v){//TODO自动生成的方法存根L