【发布时间】:2016-10-11 09:30:01
【问题描述】:
我的主要活动(包含 RecyclerView 的活动)如下所示:
myList = (RecyclerView) findViewById(R.id.my_list);
myAdapter = new MyAdapter(this, getData());
myList.setAdapter(myAdapter);
myList.setLayoutManager(new LinearLayoutManager(this));
然后我有一个 MyViewHolder,
public class MyViewHolder extends RecyclerView.ViewHolder {
...
public Button addButton;
public View root;
public MyViewHolder(View itemView) {
super(itemView);
...
addButton = (Button) itemView.findViewById(R.id.add_button);
root = itemView;
}
...
}
然后是适配器
public class MyAdapter extends RecyclerView.Adapter <MyViewHolder>{
private LayoutInflater myInflater;
List<MyModel> data = Collections.emptyList();
Context context;
public MyAdapter (Context context, List<MyModel> data) {
myInflater = LayoutInflater.from(context);
this.data = data;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = myInflater.inflate(R.layout.my_item, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
...
holder.addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Hello", "Added");
}
});
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Hello", "Rooted");
}
});
}
...
}
从上面可以看出,我有一个 RecyclerView 项,它有一个按钮作为子项。单击 childButton 时,onClickListener 工作,我得到 Added 打印。但是当我单击整个项目(根)时,什么也没有发生。为什么root onClickListener 不起作用?
我是一个真正的 Android 初学者,所以我不确定我哪里出错了。
编辑
my_item.xml 看起来像:
<LinearLayout>
<RelativeLayout
android:clickable="true"> <-- this is the problem as correctly pointed out by user13
<RelativeLayout>
<TextView>
<LinearLayout>
<TextView>
<TextView>
<TextView>
</LinearLayout>
</RelativeLayout>
<RelativeLayout>
<Button>
<Button>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
【问题讨论】:
标签: android android-recyclerview onclicklistener