Android 按钮添加到listview中的每一行

Android 按钮添加到listview中的每一行,android,listview,Android,Listview,我有一个使用ViewHolder模式的自定义适配器的Listview。。。它工作得很好,但是现在我在布局的listview中为每一行添加了两个按钮 当单击按钮时,我想获取位置(用于获取数据),我实现了OnClickListener 我该怎么做 这是我代码的一部分: public class SearchListAdapter extends BaseAdapter implements OnClickListener { public static final String TAG = "Se

我有一个使用ViewHolder模式的自定义适配器的Listview。。。它工作得很好,但是现在我在布局的listview中为每一行添加了两个按钮

当单击按钮时,我想获取位置(用于获取数据),我实现了OnClickListener

我该怎么做

这是我代码的一部分:

public class SearchListAdapter extends BaseAdapter implements OnClickListener {

public static final String TAG = "SearchListAdapter";

private LayoutInflater inflater;
private ArrayList<VideoYoutube> arrayList;
private ImageLoader imageLoader;
private Activity activity;

public SearchListAdapter(Activity a, ArrayList<VideoYoutube> array){

    activity = a;
    arrayList = array;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader = new ImageLoader(activity.getApplicationContext());
}


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

@Override
public VideoYoutube getItem(int position) {
    return arrayList.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View vi = convertView;
    ViewHolder holder = null;

    //Check if it's on memory
    if(vi == null) {
        //The view is not a recycled one: we have to inflate
        vi = inflater.inflate(R.layout.list_row_search, parent, false);

        holder = new ViewHolder();
        holder.video_title = (TextView)vi.findViewById(R.id.title);
            holder.button_play = (Button)vi.findViewById(R.id.button_play);
        holder.button_show = (Button)vi.findViewById(R.id.button_show);

        holder.button_play.setOnClickListener(this);
        holder.button_show.setOnClickListener(this);

        vi.setTag(holder);
    }
    else {

        // View recycled !
        // no need to inflate
        // no need to findViews by id
        holder = (ViewHolder) vi.getTag();
    }

    Object o = getItem(position);

    //Set video information
    holder.video_title.setText(o.getYtTitle());

    return vi;
}


@Override
public void onClick(View v) {
    switch(v.getId()){
    case R.id.button_play:
        Log.d(TAG, "Play: " + v.getId());
        break;
    case R.id.button_show:
        Log.d(TAG, "Show: " + v.getId());
        break;
    }
}   
公共类SearchListAdapter扩展BaseAdapter实现OnClickListener{
公共静态最终字符串标记=“SearchListAdapter”;
私人充气机;
私有ArrayList ArrayList;
私有图像加载器;
私人活动;
公共SearchListAdapter(活动a,ArrayList数组){
活动=a;
arrayList=数组;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
imageLoader=新的imageLoader(activity.getApplicationContext());
}
@凌驾
public int getCount(){
返回arrayList.size();
}
@凌驾
公共视频项目(内部位置){
返回arrayList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
ViewHolder=null;
//检查它是否在内存中
如果(vi==null){
//这不是一个循环的观点:我们必须膨胀
vi=充气机。充气(R.layout.list\u row\u search,parent,false);
holder=新的ViewHolder();
holder.video_title=(TextView)vi.findViewById(R.id.title);
holder.button_play=(button)vi.findviewbyd(R.id.button_play);
holder.button\u show=(button)vi.findViewById(R.id.button\u show);
holder.button\u play.setOnClickListener(此);
holder.button\u show.setOnClickListener(此);
vi.setTag(支架);
}
否则{
//查看回收!
//不需要充气
//不需要按id查找视图
holder=(ViewHolder)vi.getTag();
}
对象o=获取项目(位置);
//设置视频信息
holder.video_title.setText(o.getYtTitle());
返回vi;
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.按钮\播放:
Log.d(标记“Play:+v.getId());
打破
案例R.id.按钮显示:
Log.d(标记“Show:+v.getId());
打破
}
}   

}

据我所知,您可以使用:

private ListView mListView;

//Method Constructor
mListView = l;

@Override
public void onClick(View v) {

    int position;

    switch(v.getId()){
    case R.id.button_play:
        position = mListView.getPositionForView((View) v.getParent());
        Log.d(TAG, "Clicked: " + position);
//search in your arrayList with the position that you'll get

        break;
    }
}

您可以为具有所需数据(如项目id或位置)的按钮设置标记。然后您可以在click listener中获得所需内容,如下所示:

public View getView(int位置、视图转换视图、视图组父视图){
...
对象o=获取项目(位置);
//设置视频信息
holder.video_title.setText(o.getYtTitle());
固定器.按钮\播放.设置标签(位置);
支架。按钮显示。设置标签(位置);
返回vi;
}
...
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.按钮\播放:
对象o=getItem((int)v.getTag())
Log.d(标记“Play:+o.getYtTitle());
打破
案例R.id.按钮显示:
对象o=getItem((int)v.getTag())
Log.d(标记“Show:+o.getYtTitle());
打破
}
} 

谢谢,它对我有用!!!