Android 带有按钮的自定义Listview作为项目Listener wi

Android 带有按钮的自定义Listview作为项目Listener wi,android,listview,onitemclicklistener,Android,Listview,Onitemclicklistener,我想制作一个自定义的列表视图,其中按钮作为项目。现在,我使用的是OnItemClickListener,每次单击都会出现一条toast消息,但只有在按下按钮时,它才会出现,而不是在ListView中(见图) 如果我按下按钮,而不是从按钮中取出,我怎么能做到烤面包呢 适配器代码: public class MainListAdapter extends ArrayAdapter<Games> { Context context; int layoutResourceId; Game

我想制作一个自定义的
列表视图
,其中按钮作为项目。现在,我使用的是
OnItemClickListener
,每次单击都会出现一条toast消息,但只有在按下按钮时,它才会出现,而不是在ListView中(见图)

如果我按下按钮,而不是从按钮中取出,我怎么能做到烤面包呢

适配器代码:

public class MainListAdapter extends ArrayAdapter<Games> {

Context context;
int layoutResourceId;
Games data[] = null;

public MainListAdapter(Context context, int layoutResourceId, Games[] 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;
    ListHolder holder = null;

    if(row == null){
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ListHolder();
        holder.btn = (Button)row.findViewById(R.id.listViewButton);

        row.setTag(holder);
    }else{
        holder = (ListHolder)row.getTag();
    }
    Games games = data[position];
    holder.btn.setText(games.name);

    return row;
}

static class ListHolder {
    Button btn;
}

}
public类MainListAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
游戏数据[]=null;
公共MainListAdapter(上下文上下文、内部布局资源ID、游戏[]数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
ListHolder=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的ListHolder();
holder.btn=(按钮)row.findViewById(R.id.listViewButton);
row.setTag(支架);
}否则{
holder=(ListHolder)行。getTag();
}
游戏=数据[位置];
holder.btn.setText(games.name);
返回行;
}
静态类列表持有者{
按钮btn;
}
}
在活动中:

MainListAdapter adapter = new MainListAdapter(this, R.layout.listview_item_row, games_data);

    listView1 = (ListView)findViewById(R.id.listView1);

    final View header = (View)getLayoutInflater().inflate(R.layout.listview_newgame_row, null);
    listView1.addHeaderView(header);

    listView1.setAdapter(adapter);

    listView1.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Toast.makeText(getApplicationContext(), "clicked", Toast.LENGTH_LONG).show();
        }

    });
MainListAdapter=新的MainListAdapter(这个,R.layout.listview\u项目\u行,游戏\u数据);
listView1=(ListView)findViewById(R.id.listView1);
最终视图标题=(视图)GetLayoutFlater().充气(R.layout.listview\u newgame\u行,空);
listView1.addHeaderView(标题);
listView1.setAdapter(适配器);
listView1.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
Toast.makeText(getApplicationContext(),“单击”,Toast.LENGTH_LONG.show();
}
});
listview_item_row.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"
android:orientation="vertical" >

<Button
    android:id="@+id/listViewButton"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:focusable="false"
    android:background="@drawable/button" />


在Adupter类中,为按钮创建两个对象

以及adupter视图中按钮的setonclicklistner

例如


为按钮创建单独的OnClick侦听器。McClickListener用于列表项

首先,您必须创建这样的xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

我希望已经满足了您的所有要求:)

将您的代码发布到弹出的toast消息中,但只有当我按下按钮时,它才会弹出,但在ListView中(见图)。这是什么意思?我在智能手机上,这里没有代码。当我在pc机上@home时,我会发布它。这意味着按钮宽度不是listview的全宽。左右距离为20dp。仅当我按20dp距离时,信息才会出现,而当我按button@PiyushGupta他的意思是:当他按下按钮时,没有祝酒词。但是当他触摸按钮外的祝酒词时,可能会出现在评论中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>
class MyAdapter extends ArrayAdapter<View.OnClickListener> {
    public MyAdapter(Context context, int textViewResourceId, View.OnClickListener[] objects) {
        super(context, textViewResourceId, objects);
    }
    public MyAdapter(Context context, int resource, int textViewResourceId, List<View.OnClickListener> objects) {
        super(context, resource, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.event_layout, null);

        Button b = (Button) convertView.findViewById(R.id.btn);

        View.OnClickListener l = getItem(position);
        b.setOnClickListener(l);

        return convertView;
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LayoutActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".YourActivityName" >
        <Button
            android:id="@+id/btnHeader1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />
        <Button
            android:id="@+id/btnHeader2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />

       <ListView
           android:id="@+id/your_list"
           android:layout_width="match_parent"
           android:layout_height="wrap_content">
       </ListView>
</LinearLayout>
ListView list = (ListView)findViewById(R.id.your_list);

View.OnClickListener[] listeners = ....;

MyAdapter adapter = new MyAdapter(context, R.layout.your_list_layout_adapter, listeners);
list.setAdapter(adapter);