Ósc*_*car 5 java android fragment android-recyclerview
解决了
\n\n我已经修复了它,混合了你的答案,所以我决定写在这里。
\n\n关键是ViewHolder构造函数:
我已经删除了setOnClickListener()和onClick()方法,并且我\xc2\xb4ve在我的ObjectAdapter.java.
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}\nRun Code Online (Sandbox Code Playgroud)\n\n这就是\xc2\xb4 的全部。班级的其余部分都是一样的。
\n\n这ObjectFragment.java:
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}\nRun Code Online (Sandbox Code Playgroud)\n\n非常感谢你们。
\n\n原问题
\n\n我有一个RecyclerView其中包含一些CardViews. 这CardViews有两个不同的ImageButton,当你点击它们时会产生不同的结果(显而易见)。
这里是card_object.xml
<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>\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的主要代码ObjectAdapter.java:
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}\nRun Code Online (Sandbox Code Playgroud)\n\n我的ObjectFragment.java是下一个:
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}\nRun Code Online (Sandbox Code Playgroud)\n\n我可以获得Object属性的值(名称、标题等),然后单击CardView等等,但我无法将其设为ImageButton自己的 onClick。
我不知道是否使用android:onClick()它是否可以显示特定卡的信息,但这是另一回事。
所以我的问题是如何使这两个按钮有自己的OnClickListener,我应该在哪里声明它以及如何处理每个项目的信息RecyclerView之后的每个项目的信息(这部分几乎已实现)。
任何想法?多谢!
\n| 归档时间: |
|
| 查看次数: |
5317 次 |
| 最近记录: |