2016-07-12 65 views
0

我试图让listView具有与listView上的每个项目对应的按钮。例如,如果我在列表中有一个产品,我想单击该按钮并在单击该按钮时显示该特定产品的信息。我如何在适配器上为我的按钮添加单击监听器,以便它可以根据listview中的每个项目工作?为listView中的每个项目添加自定义适配器中的按钮

这是我的自定义阵列适配器。

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; 

} 
} 

这是我的按钮

<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" /> 
+0

在ListView行中添加按钮的方式与您添加TextView和ImageView的方式相同。有什么问题吗? –

+0

将按钮添加到您的xml文件content_orders,然后将其添加到自定义适配器ViewHolder中,并且ListView中的每一行都将包含一个按钮。 – DAVIDBALAS1

回答

1

把按钮视图与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; 
} 
+0

奇怪的是,这个答案被接受,但你宣布clickableButton并绑定视图持有人与它。 –

1

您可以将点击侦听器添加到getView()方法中的按钮。然后,您可以使用对“持有人”的引用来自定义所要列举的项目特定操作。

0

如果您提供的按钮xml代码位于content_orders布局中。然后代码应该是这样的

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; 

} 
} 
相关问题