Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中每行带有添加和删除按钮的ListView_Android_Android Listview_Add - Fatal编程技术网

android中每行带有添加和删除按钮的ListView

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<

我正在开发一个android应用程序,其中我制作了一个ListView。我必须为ListView中的每一行添加2个按钮。这两个按钮是“添加”和“删除”。当用户选择其中一个按钮时,应采取一些措施。我该怎么做?

公共类用户自定义适配器扩展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