Android layout 如何在android中为listview中的按钮设置onclicklistener?

Android layout 如何在android中为listview中的按钮设置onclicklistener?,android-layout,android-custom-view,Android Layout,Android Custom View,我有一个列表视图,有一个按钮和一个文本视图。如何为listView中的按钮设置onclicklistener? 代码如下: ListView.xml: ListView lv1 = (ListView)popupView.findViewById(R.id.listView1); listviewAdapter adapter = new listviewAdapter(Order_page.this, alist); lv1.setAdapter(adapter); ListviewAdap

我有一个列表视图,有一个按钮和一个文本视图。如何为listView中的按钮设置onclicklistener? 代码如下:

ListView.xml:

ListView lv1 = (ListView)popupView.findViewById(R.id.listView1);
listviewAdapter adapter = new listviewAdapter(Order_page.this, alist);
lv1.setAdapter(adapter);
ListviewAdapter类如下所示:

public class listviewAdapter extends BaseAdapter {
public ArrayList<HashMap<String, String>> list;
Activity activity;

public listviewAdapter(Activity activity,
        ArrayList<HashMap<String, String>> list) {
    super();
    this.activity = activity;
    this.list = list;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

class ViewHolder {
    Button btn_fav, btn_plus, btn_minus;
    TextView item_name;
    TextView item_price;
    TextView item_total;
    EditText et_quantity;
}

@Override
public View getView(int position, View convertView, final ViewGroup parent) {
    // TODO Auto-generated method stub

    // TODO Auto-generated method stub
    ViewHolder holder;
    LayoutInflater inflater = activity.getLayoutInflater();

    if (convertView == null) {

        convertView = inflater.inflate(R.layout.order_list_texts, null);
        holder = new ViewHolder();

        holder.btn_fav = (Button) convertView.findViewById(R.id.fav_btn_orderlist);
        holder.btn_plus = (Button) convertView.findViewById(R.id.order_pg_plus);
        holder.btn_minus = (Button) convertView.findViewById(R.id.order_pg_minus);

        holder.item_name = (TextView) convertView.findViewById(R.id.item_name);
        holder.item_price = (TextView) convertView.findViewById(R.id.itm_price);
        holder.item_total = (TextView) convertView.findViewById(R.id.Item_total);
        holder.et_quantity = (EditText) convertView.findViewById(R.id.et_quantity_order_list);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    HashMap<String, String> map = list.get(position);
    holder.item_name.setText(map.get(ITEM_NAME_COLUMN));
    holder.item_price.setText(map.get(ITEM_PRICE_COLUMN));
    holder.item_total.setText(map.get(TOTAL_COLUMN));
    holder.et_quantity.setText(map.get(ITEM_QUANTITY_COLUMN));

    return convertView;
}

}
公共类listviewAdapter扩展了BaseAdapter{
公共阵列列表;
活动;
公共listviewAdapter(活动,
ArrayList(列表){
超级();
这个。活动=活动;
this.list=列表;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回list.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
类视图持有者{
按钮btn_fav,btn_加,btn_减;
TextView项目名称;
text查看项目价格;
text查看项目总数;
编辑文本等数量;
}
@凌驾
公共视图getView(int位置、视图转换视图、最终视图组父视图){
//TODO自动生成的方法存根
//TODO自动生成的方法存根
视窗座;
LayoutInflater充气器=活动。getLayoutInflater();
if(convertView==null){
convertView=充气机。充气(R.layout.order\u list\u文本,空);
holder=新的ViewHolder();
holder.btn_fav=(按钮)convertView.findViewById(R.id.fav_btn_订单列表);
holder.btn\u plus=(按钮)convertView.findViewById(R.id.order\u pg\u plus);
holder.btn\u减号=(按钮)convertView.findViewById(R.id.order\u pg\u减号);
holder.item_name=(TextView)convertView.findViewById(R.id.item_name);
holder.item_price=(TextView)convertView.findViewById(R.id.itm_price);
holder.item_total=(TextView)convertView.findViewById(R.id.item_total);
holder.et_quantity=(EditText)convertView.findViewById(R.id.et_quantity_order_list);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
HashMap map=list.get(位置);
holder.item_name.setText(map.get(item_name_列));
holder.item_price.setText(map.get(item_price_列));
holder.item_total.setText(map.get(total_列));
holder.et_quantity.setText(map.get(ITEM_quantity_列));
返回视图;
}
}

请帮助设置按钮的onClick事件

您只需添加一个带有
myButton.setOnClickListener(mBuyButtonClickListener)
这将在ListView的
getView()
中完成

您可以使用myListView.getPositionForView(myButton) 以下解决方案可以帮助您:

private OnClickListener mBuyButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
    final int position = getListView().getPositionForView(v);
    if (position != ListView.INVALID_POSITION) {
        //DO THE STUFF YOU WANT TO DO WITH THE position
    }
}
})


如需进一步帮助,请访问。。希望答案对您有所帮助。

下面列出了完整的代码,太简单了

public class listviewAdapter extends BaseAdapter {
public ArrayList<HashMap<String, String>> list;
Activity activity;

public listviewAdapter(Activity activity,
        ArrayList<HashMap<String, String>> list) {
    super();
    this.activity = activity;
    this.list = list;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

class ViewHolder {
    Button btn_fav, btn_plus, btn_minus, btn_delete;
    TextView item_name;
    TextView item_price;
    TextView item_total;
    EditText et_quantity;

}

@Override
public View getView(final int position, View convertView,
        final ViewGroup parent) {
    // TODO Auto-generated method stub

    final ViewHolder holder;
    LayoutInflater inflater = activity.getLayoutInflater();

    if (convertView == null) {

        convertView = inflater.inflate(R.layout.order_list_texts, null);

        holder = new ViewHolder();

        holder.btn_fav = (Button) convertView.findViewById(R.id.fav_btn_orderlist);

        holder.btn_plus = (Button) convertView.findViewById(R.id.orderlist_plus);
        holder.btn_minus = (Button) convertView.findViewById(R.id.orderlist_minus);

        holder.item_name = (TextView) convertView.findViewById(R.id.item_name);
        holder.item_price = (TextView) convertView.findViewById(R.id.itm_price);
        holder.item_total = (TextView) convertView.findViewById(R.id.Item_total);
        holder.et_quantity = (EditText) convertView.findViewById(R.id.et_quantity_order_list);

        holder.btn_delete = (Button) convertView.findViewById(R.id.btn_order_list_delete);

        convertView.setTag(holder);

    } 
    else 
    {
        holder = (ViewHolder) convertView.getTag();
    }

    final HashMap<String, String> map = list.get(position);
    holder.item_name.setText(map.get(ITEM_NAME_COLUMN));
    holder.item_price.setText(map.get(ITEM_PRICE_COLUMN));
    holder.item_total.setText(map.get(TOTAL_COLUMN));
    holder.et_quantity.setText(map.get(ITEM_QUANTITY_COLUMN));

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

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            list.remove(position);
            notifyDataSetChanged();
            //Log.v("sd", "" + alist);

        }
    });

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

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            //to get a specific item
            Toast.makeText(activity,"" + holder.item_name.getText().toString(),Toast.LENGTH_LONG).show();

        }
    });

    /*
     * holder.et_quantity.addTextChangedListener(new TextWatcher() {
     * 
     * @Override public void onTextChanged(CharSequence arg0, int arg1, int
     * arg2, int arg3) { // TODO Auto-generated method stub
     * 
     * }
     * 
     * @Override public void beforeTextChanged(CharSequence arg0, int arg1,
     * int arg2, int arg3) { // TODO Auto-generated method stub
     * 
     * }
     * 
     * @Override public void afterTextChanged(Editable arg0) { // TODO
     * Auto-generated method stub Toast.makeText(activity,
     * ""+getItem(position), 1000).show(); } });
     */
    return convertView;
}

}
公共类listviewAdapter扩展了BaseAdapter{
公共阵列列表;
活动;
公共listviewAdapter(活动,
ArrayList(列表){
超级();
这个。活动=活动;
this.list=列表;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回list.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
类视图持有者{
按钮btn_fav、btn_plus、btn_减号、btn_删除;
TextView项目名称;
text查看项目价格;
text查看项目总数;
编辑文本等数量;
}
@凌驾
公共视图getView(最终整型位置,视图转换视图,
最终视图组(父视图){
//TODO自动生成的方法存根
最终持票人;
LayoutInflater充气器=活动。getLayoutInflater();
if(convertView==null){
convertView=充气机。充气(R.layout.order\u list\u文本,空);
holder=新的ViewHolder();
holder.btn_fav=(按钮)convertView.findViewById(R.id.fav_btn_订单列表);
holder.btn_plus=(按钮)convertView.findViewById(R.id.orderlist_plus);
holder.btn_减号=(按钮)convertView.findViewById(R.id.orderlist_减号);
holder.item_name=(TextView)convertView.findViewById(R.id.item_name);
holder.item_price=(TextView)convertView.findViewById(R.id.itm_price);
holder.item_total=(TextView)convertView.findViewById(R.id.item_total);
holder.et_quantity=(EditText)convertView.findViewById(R.id.et_quantity_order_list);
holder.btn\u delete=(按钮)convertView.findViewById(R.id.btn\u order\u list\u delete);
convertView.setTag(支架);
} 
其他的
{
holder=(ViewHolder)convertView.getTag();
}
final HashMap map=list.get(位置);
holder.item_name.setText(map.get(item_name_列));
holder.item_price.setText(map.get(item_price_列));
holder.item_total.setText(map.get(total_列));
holder.et_quantity.setText(map.get(ITEM_quantity_列));
holder.btn_delete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
列表。删除(位置);
notifyDataSetChanged();
//Log.v(“sd”和“+alist”);
}
});
holder.btn_减去.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
//获取特定项目
Toast.makeText(活动““+holder.item_name.getText().toString(),Toast.LENGTH_LONG.show();
}
});
/*
*holder.et_quantity.addTextChangedListener(新的TextWatcher(){
* 
*@Override public void onTextChanged(字符序列arg0,int arg1,int
*arg2,int arg3){//TODO自动生成的方法存根
* 
* }
* 
*@Override public void beforeTextChanged(字符序列arg0,int arg1