Android 活动中的回收器视图Onclick方法?

Android 活动中的回收器视图Onclick方法?,android,android-recyclerview,staggered-gridview,Android,Android Recyclerview,Staggered Gridview,我正在尝试创建一个类似于的UI。我知道如何使用回收器视图创建交错视图。如果我点击一张特定的卡片。然后它必须打开一个活动 我可以做到这一点 在我的应用程序中,至少有5种不同的活动会出现这种情况 我的问题是 我可以在所有这5个地方使用这个适配器吗 如果是,我应该在哪里放置onclick操作 如果没有,如何创建像Keep这样的交错布局 提前谢谢 请参见下面编辑中的RecyclerView应用程序 正如我在评论中提到的,为所有使用不同数据和视图的活动使用单独的适配器当然是好的。随着你的应用程序数据和布局

我正在尝试创建一个类似于的UI。我知道如何使用回收器视图创建交错视图。如果我点击一张特定的卡片。然后它必须打开一个活动

我可以做到这一点

在我的应用程序中,至少有5种不同的活动会出现这种情况

我的问题是

我可以在所有这5个地方使用这个适配器吗

如果是,我应该在哪里放置onclick操作

如果没有,如何创建像Keep这样的交错布局


提前谢谢

请参见下面编辑中的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();
    }
}