单击 RecyclerView 中属于 CardView 的 ImageButton

Ósc*_*car 5 java android fragment android-recyclerview

解决了

\n\n

我已经修复了它,混合了你的答案,所以我决定写在这里。

\n\n

关键是ViewHolder构造函数:

\n\n

我已经删除了setOnClickListener()onClick()方法,并且我\xc2\xb4ve在我的ObjectAdapter.java.

\n\n
public static class ViewHolder extends RecyclerView.ViewHolder{\n\n     public ViewHolder(View itemView) {\n            super(itemView);\n            card_first_btn.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    int position = getAdapterPosition();\n                    Toast.makeText(v.getContext(), object.get(position).getName(), Toast.LENGTH_SHORT).show();\n                }\n            });\n            card_second_btn.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    Toast.makeText(v.getContext(), "Forward button", Toast.LENGTH_SHORT).show();\n                }\n            });\n     }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就是\xc2\xb4 的全部。班级的其余部分都是一样的。

\n\n

ObjectFragment.java

\n\n
public class ObjectFragment extends Fragment {\n\n    public void ObjectFragment() {\n        // Required empty public constructor\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {\n        // Inflate the layout for this Fragment\n        return layoutInflater.inflate(R.layout.fragment_object, container, false);\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n\n        final ArrayList<Object> objects = initializeList();\n\n        if(!objects.isEmpty()) {   \n            RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.objects_recyclerView);\n            recyclerView.setHasFixedSize(true);\n            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));\n            recyclerView.setItemAnimator(new DefaultItemAnimator());\n            recyclerView.addItemDecoration(new SimpleDivider(getActivity().getApplicationContext()));\n\n            final ObjectAdapter objectAdapter = new ObjectAdapter(objects, R.layout.card_object);    \n            recyclerView.setAdapter(objectAdapter);\n        }\n    }\n\n    private ArrayList<Object> initializeList() {\n        ArrayList<Object> objects= new ArrayList<>();    \n        objects.add(new Object(...));    \n        return objects;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

非常感谢你们。

\n\n
\n\n

原问题

\n\n

我有一个RecyclerView其中包含一些CardViews. 这CardViews有两个不同的ImageButton,当你点击它们时会产生不同的结果(显而易见)。

\n\n

这里是card_object.xml

\n\n
<android.support.v7.widget.CardView\n    xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:card_view="http://schemas.android.com/apk/res-auto"\n    android:layout_width="match_parent"\n    android:layout_height="wrap_content"\n    android:id="@+id/object_card"\n    card_view:cardCornerRadius="2dp"\n    card_view:cardElevation="2dp"\n    card_view:cardBackgroundColor="@color/colorPrimary"\n    android:clickable="true">\n\n    <LinearLayout\n        android:layout_height="match_parent"\n        android:layout_width="match_parent"\n        android:orientation="vertical"\n        android:background="@color/colorPrimary">\n\n        <ImageButton\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:id="@+id/object_card_first_button"\n                android:src="@drawable/contact_100px"\n                android:maxHeight="25dp"\n                android:maxWidth="25dp"\n                android:adjustViewBounds="true"\n                android:scaleType="centerCrop"\n                android:background="@color/transparentBackgroundPrimary"\n                android:layout_marginRight="54dp"\n                android:layout_marginEnd="54dp"/>\n\n        <ImageButton\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:src="@drawable/forward_100px"\n                android:maxHeight="25dp"\n                android:maxWidth="25dp"\n                android:adjustViewBounds="true"\n                android:scaleType="centerCrop"\n                android:background="@color/transparentBackgroundPrimary"\n                android:id="@+id/object_card_second_button" />\n    </LinearLayout>\n</android.support.v7.widget.CardView>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的主要代码ObjectAdapter.java

\n\n
public class ObjectAdapter \n        extends RecyclerView.Adapter<ObjectAdapter.ViewHolder> \n        implements View.OnClickListener {\n\n    private ArrayList<Object> objects;\n    private int itemLayout;\n    private View.OnClickListener onClickListener;\n\n    public ObjectAdapter(ArrayList<Object> objects, int itemLayout) {\n        this.objects = objects;\n        this.itemLayout = itemLayout;\n    }\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {\n        View view = LayoutInflater.from(viewGroup.getContext())\n                .inflate(itemLayout, viewGroup, false);\n\n        view.setOnClickListener(this);\n\n        return new ViewHolder(view);\n    }\n\n    public void setOnClickListener(View.OnClickListener listener) {\n        this.onClickListener = listener;\n    }\n\n    public void onClick(View view) {\n        if(onClickListener != null) {\n        onClickListener.onClick(view);\n    } \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的ObjectFragment.java是下一个:

\n\n
public class ObjectFragment extends Fragment {\n\n    public void ObjectFragment() {\n        // Required empty public constructor\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {\n        // Inflate the layout for this Fragment\n        return layoutInflater.inflate(R.layout.fragment_object, container, false);\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n\n        final ArrayList<Object> objects = initializeList();\n\n        if(!objects.isEmpty()) {   \n            RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.objects_recyclerView);\n            recyclerView.setHasFixedSize(true);\n            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));\n            recyclerView.setItemAnimator(new DefaultItemAnimator());\n            recyclerView.addItemDecoration(new SimpleDivider(getActivity().getApplicationContext()));\n\n            final ObjectAdapter objectAdapter = new ObjectAdapter(objects, R.layout.card_object);\n            objectAdapter.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    // Here I can manage my Object attributes,\n                    // but no the ImageButtons itselves\n                }\n            });\n\n            recyclerView.setAdapter(objectAdapter);\n        }\n    }\n\n    private ArrayList<Object> initializeList() {\n        ArrayList<Object> objects= new ArrayList<>();    \n        objects.add(new Object(...));    \n        return objects;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以获得Object属性的值(名称、标题等),然后单击CardView等等,但我无法将其设为ImageButton自己的 onClick。

\n\n

我不知道是否使用android:onClick()它是否可以显示特定卡的信息,但这是另一回事。

\n\n

所以我的问题是如何使这两个按钮有自己的OnClickListener,我应该在哪里声明它以及如何处理每个项目的信息RecyclerView之后的每个项目的信息(这部分几乎已实现)。

\n\n

任何想法?多谢!

\n

kin*_*ing 0

我认为类似 view.findViewById(R.id.mybutton).setOnClickListener(...); 应该做这项工作。

让我知道这是否有效。