简体   繁体   English

在自定义适配器中为listView中的每个项目添加按钮

[英]Adding button in custom adapter for each item in listView

I'm trying to get a listView to have a button that corresponds to each item on the listView. 我正在尝试使listView具有对应于listView上每个项目的按钮。 For example, if I have a product in the list, i want to click the button and display the information for that specific product when i click the button. 例如,如果我在列表中有一个产品,则我想单击该按钮,并在单击该按钮时显示该特定产品的信息。 How can i add an on click listener in the adapter for my button so that it works according to each item in the listview? 如何在适配器中为按钮添加on click侦听器,以便它可以根据列表视图中的每个项目工作?

This is my custom array adapter. 这是我的自定义阵列适配器。

public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<Bean> mList;

public MyAdapter(Context context,List<Bean> list){
    mContext=context;
    mList=list;
}

@Override
public int getCount() {
    return mList.size();
}

@Override
public Object getItem(int position) {
    return mList.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    //use convertView recycle
    if(convertView==null){
        holder=new ViewHolder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.content_orders, parent, false);
        holder.textView= (TextView) convertView.findViewById(R.id.textView2);
        holder.imageView= (ImageView) convertView.findViewById(R.id.imageView2);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }

    //set text and url
    holder.textView.setText(mList.get(position).getText());
    Picasso.with(mContext).load(mList.get(position).getUrl()).resize(500,500).into(holder.imageView);

    return convertView;
}

class ViewHolder{
    TextView textView;
    ImageView imageView;

}
}

And this is my Button 这是我的纽扣

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Information"
    android:id="@+id/button5"
    android:layout_below="@+id/button4"
    android:layout_alignRight="@+id/button4"
    android:layout_alignEnd="@+id/button4"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

Put the button view into the your row layout with the Textview and ImageView. 使用Textview和ImageView将按钮视图放入行布局。

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    //use convertView recycle
    if(convertView==null){
        holder=new ViewHolder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.content_orders, parent, false);
        holder.textView= (TextView) convertView.findViewById(R.id.textView2);
        holder.imageView= (ImageView) convertView.findViewById(R.id.imageView2);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }
holder.clickableButton.setOnClickListener(new OnClickListener() {  

            @Override  
            public void onClick(View v) {  
               //Code goes here

            }  
        });  

    //set text and url
    holder.textView.setText(mList.get(position).getText());
    Picasso.with(mContext).load(mList.get(position).getUrl()).resize(500,500).into(holder.imageView);

    return convertView;
}

you can add the click listener to the button in your getView() method. 您可以将点击侦听器添加到getView()方法中的按钮。 Then you can use references to 'holder' to customize what ever list item specific action you want. 然后,您可以使用对“所有者”的引用来自定义所需的列表项特定操作。

If button xml code that you provided is inside content_orders layout. 您提供的按钮XML代码是否位于content_orders布局内。 Then the code should be like this 然后代码应该像这样

public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<Bean> mList;

public MyAdapter(Context context,List<Bean> list){
    mContext=context;
    mList=list;
    }

@Override
public int getCount() {
    return mList.size();
}

@Override
public Object getItem(int position) {
    return mList.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    //use convertView recycle
    if(convertView==null){
    holder=new ViewHolder();
    convertView =   LayoutInflater.from(mContext).inflate(R.layout.content_orders, parent, false);
    holder.textView= (TextView) convertView.findViewById(R.id.textView2);
    holder.imageView= (ImageView) convertView.findViewById(R.id.imageView2);
holder.btn= (Button) convertView.findViewById(R.id.button5);
    convertView.setTag(holder);
}else{
    holder = (ViewHolder) convertView.getTag();
}

//set text and url
holder.textView.setText(mList.get(position).getText());
Picasso.with(mContext).load(mList.get(position).getUrl()).resize(500,500).into(holder.imageView);

holder.btn.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {
    // do something 
Toast.makeText(mContext,String.valueOf(position),Toast.LENGTH_SHORT).show();
    }
});

    return convertView;
}

class ViewHolder{
    TextView textView;
    ImageView imageView;
    Button btn;

}
}

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

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