Android 活动中的回收器视图Onclick方法?
我正在尝试创建一个类似于的UI。我知道如何使用回收器视图创建交错视图。如果我点击一张特定的卡片。然后它必须打开一个活动 我可以做到这一点 在我的应用程序中,至少有5种不同的活动会出现这种情况 我的问题是 我可以在所有这5个地方使用这个适配器吗 如果是,我应该在哪里放置onclick操作 如果没有,如何创建像Keep这样的交错布局Android 活动中的回收器视图Onclick方法?,android,android-recyclerview,staggered-gridview,Android,Android Recyclerview,Staggered Gridview,我正在尝试创建一个类似于的UI。我知道如何使用回收器视图创建交错视图。如果我点击一张特定的卡片。然后它必须打开一个活动 我可以做到这一点 在我的应用程序中,至少有5种不同的活动会出现这种情况 我的问题是 我可以在所有这5个地方使用这个适配器吗 如果是,我应该在哪里放置onclick操作 如果没有,如何创建像Keep这样的交错布局 提前谢谢 请参见下面编辑中的RecyclerView应用程序 正如我在评论中提到的,为所有使用不同数据和视图的活动使用单独的适配器当然是好的。随着你的应用程序数据和布局
提前谢谢 请参见下面编辑中的RecyclerView应用程序 正如我在评论中提到的,为所有使用不同数据和视图的活动使用单独的适配器当然是好的。随着你的应用程序数据和布局变得越来越复杂,你的代码也变得越来越复杂……事情就是这样 但是,如果您的某些活动在其列表视图中使用了类似的数据(例如,两个TextView和一个ImageButton),那么您可以通过定义一个可用于多个活动的适配器来节省一些工作。然后为每个活动实例化单独的对象,类似于创建多个ArrayAdapter对象以填充多个ListView的方式 在编写自定义适配器时,是一个很好的扩展类。它非常灵活,允许您完全控制在ListView中显示的数据。下面是一个简单的例子:
public class CustomBaseAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> listData;
public CustomBaseAdapter(Context context, ArrayList<String> listData) {
this.context = context;
this.listData = listData;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.your_list_item_layout, parent, false);
//populate the view with your data -- some examples...
TextView textData = (TextView) convertView.findViewById(R.id.yourTextView);
textData.setText(listData.get(position));
ImageButton button = (ImageButton) convertView.findViewById(R.id.yourImageButton);
button.setOnClickListener(new View.OnClickListener() {
//...
//...
});
}
return convertView;
}
@Override
public Object getItem(int position) {
return 0;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getCount() {
return listData.size();
}
}
我不知道你在哪里被卡住了。你提供的链接准确地显示了如何做你想做的事情。如果我在适配器中使用Onclick方法,那么这个问题可能还不清楚。它起作用了。然后,对于另一个活动,我必须创建另一个适配器。因此需要5个适配器及更多。这是一个好的实践吗?如果在所有五个活动中都要表示相同的数据,那么您可以使用相同的适配器。但你为什么这么做。相反,您可以使用单个活动并使用按钮来更改视图。@user3467240-如果5个活动都使用单独的数据和UI组件,那么为5个活动使用5个适配器绝对可以。您可以创建一个BaseAdapter类,该类为各种活动提供不同的适配器对象,前提是这些活动之间的数据足够统一。您只需通过构造函数或其他方式传递数据列表,但也不要为创建5个单独的适配器而感到难过。如果您需要帮助了解如何执行此操作,我将在下面提供一些代码。@drschultz这5个活动使用单独的数据并重定向到不同的活动。给我看看代码。这样我才能更好地理解。问题指定了回收器视图的使用,您的回答是关于列表视图的。回答时请小心。@VipulAsri-Oops,是的,你是对的。在尝试演示如何使用自定义适配器之后,我更感兴趣,BaseAdapter是其中一个更简单的适配器。但你是对的,它应该为RecyclerView量身定做。有机会的时候我会做一些修改。
public class CustomRecyclerViewAdapter extends RecyclerView.Adapter<StringViewHolder> {
private final List<String> items;
public CustomRecyclerViewAdapter(ArrayList<String> items) {
this.items = items;
}
@Override
public StringViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//So instead of inflating the views here or in a getView() like in
//in the BaseAdapter, you would instead inflate them in your custom
//ViewHolder.
return new StringViewHolder(parent);
}
@Override
public void onBindViewHolder(StringViewHolder holder, int position) {
holder.setModel(items.get(position));
}
@Override
public long getItemId(int position) {
return items.get(position).hashCode();
}
@Override
public int getItemCount() {
return items.size();
}
}