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);