Android 当一个活动中包含多个片段时,RecycleServiceClickListener onClick不在片段中工作
这个有点难以解释和证明。我会尽力的。 我有两个片段ItemListFragment和ItemViewFragment:一个片段包含一个recycleview并在recycleview中列出,另一个片段分别显示一个项目 在ItemListFragment中,有RecycleServiceClickListener来处理对列表项的单击。 实施情况如下:Android 当一个活动中包含多个片段时,RecycleServiceClickListener onClick不在片段中工作,android,android-fragments,android-recyclerview,Android,Android Fragments,Android Recyclerview,这个有点难以解释和证明。我会尽力的。 我有两个片段ItemListFragment和ItemViewFragment:一个片段包含一个recycleview并在recycleview中列出,另一个片段分别显示一个项目 在ItemListFragment中,有RecycleServiceClickListener来处理对列表项的单击。 实施情况如下: public class ItemListFragment extends Fragment { private OnFragmentLi
public class ItemListFragment extends Fragment {
private OnFragmentListClickListener onClickListener = null;
public interface OnFragmentListClickListener {
void OnFragmentListClick(ItemModel Item);
}
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
class RecyclerViewClickListenerImpl implements RecyclerViewClickListener {
@Override
public void onClick(View view, int position) {
if (onClickListener != null) {
onClickListener.OnFragmentListClick(adapter.getItem(position));
}
}
adapter = new ItemListAdapter(getActivity(), ItemModelList, new RecyclerViewClickListenerImpl());
mRecyclerView = getActivity().findViewById(R.id.recycler_view);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(adapter);
.
.
.
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Toast.makeText(getActivity(), "onAttach", Toast.LENGTH_SHORT).show();
if (context instanceof OnFragmentListClickListener) {
onClickListener = (OnFragmentListClickListener) context;
}
}
.
.
.
}
该列表包含缩略图(加载了Glide)和每次的文本
当我在实现ItemListFragment.OnFragmentListClickListener界面的活动中添加此片段时,使用以下代码一切正常:
public class MainActivity extends AppCompatActivity
implements ItemListFragment.OnFragmentListClickListener {
.
.
.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ItemListFragment fragment_list = ItemListFragment.newInstance();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment_list);
fragmentTransaction.commit();
}
@Override
public void OnFragmentListClick(CameraModel camera) {
// handle the list click
}
.
.
.
}
当我尝试在我的活动中添加第二个片段(ItemViewFragment)时,事情变得很奇怪,如下所示:
public class ItemListFragment extends Fragment {
private OnFragmentListClickListener onClickListener = null;
public interface OnFragmentListClickListener {
void OnFragmentListClick(ItemModel Item);
}
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
class RecyclerViewClickListenerImpl implements RecyclerViewClickListener {
@Override
public void onClick(View view, int position) {
if (onClickListener != null) {
onClickListener.OnFragmentListClick(adapter.getItem(position));
}
}
adapter = new ItemListAdapter(getActivity(), ItemModelList, new RecyclerViewClickListenerImpl());
mRecyclerView = getActivity().findViewById(R.id.recycler_view);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(adapter);
.
.
.
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Toast.makeText(getActivity(), "onAttach", Toast.LENGTH_SHORT).show();
if (context instanceof OnFragmentListClickListener) {
onClickListener = (OnFragmentListClickListener) context;
}
}
.
.
.
}
当存在第二个片段时,不再调用ItemListFragment上的RecyclServiceWClickListener的onClick:
class RecyclerViewClickListenerImpl implements RecyclerViewClickListener {
@Override
public void onClick(View view, int position) {
if (onClickListener != null) {
onClickListener.OnFragmentListClick(adapter.getItem(position));
}
}
此外,当在活动中添加第二个片段时,ItemListFragment中的某些Thmbnail停止工作
这是一个奇怪的。。。我尝试使用fragmentTransaction.add而不是fragmentTransaction.add以及所有类型的组合…您希望将onClick放在回收视图的项目中。您应该在ViewHolder类中完成项目的所有操作(例如:加载图像、为视图生成事件等)。因为在活动或片段中更容易查看源代码。您可以使用此引用我的ViewHolder类。这将对您有所帮助。从我所读到的内容来看,这实际上不是一个好方法。。。点击事件的处理不应该在viewHolder中进行,而是在片段中进行,我认为在活动中进行更好(这就是我所做的)我知道这将是一个棘手的lol:)哈哈知道这将没有答案。。。太复杂了,我自己会找到解决办法的