[英]where and how to put a onclick in recyclerview to get the result in the activity that contain the fragment?
在我的应用程序中,我有一个使用片段的活动。 在这样一个片段中,我使用的是回收视图。 我只想添加(一个或多个)onClick(s),我可以根据需要在片段或活动中处理其操作。
我搜索了很多。 我找到了很多解决方案,但在我看来没有一个能真正回应我的案例,但这并不是那么例外。 我在OnBindviewHolder中找到了onClick的很多解决方案。 然而,我也经常读到这种解决方案是不可接受的,因为它消耗了不必要的资源。 我找到了一个解决方案( https://openclassrooms.com/en/courses/4568576-recover-and-display-distant-data/4893791-interact-with-the-recyclerview )使用 itemClickSupport class 有效,但我不不知道如何充分利用它。 所以,我在兜圈子,我不知道我应该 go 到哪条轨道,没有浪费我的时间,最后我没有必要地意识到我没有 go 在正确的方向。
编辑:另一个对我来说似乎很完美的解决方案( https://openclassrooms.com/fr/courses/4568596-construisez-une-interface-utilisateur-flexible-et-adaptative/4789616-creez-votre-premiere-application-avec- des-fragments ),通过回调自动在片段中创建它,但是,我不知道如何在父活动中获取它。
我真正想要的是:
在智能手机上:
在平板电脑上(使用另一种布局):
我意识到我在解释我想要的东西时遇到了很多麻烦,而我找到解决方案的问题可能来自于此。
我想我终于找到了一个有用的解决方案:
活动:
public class MainActivity extends FragmentActivity implements MainFragment.SampleOnClickedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void sampleOnClicked(int position) {
Log.e("TAG", " from activity / position:" + position);
}
}
分段:
public class MainFragment extends Fragment implements SampleAdapter.SampleRecyclerViewHolder.SampleOnListener {
private SampleOnClickedListener mCallback;
public interface SampleOnClickedListener {
void sampleOnClicked(int position);
}
public MainFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
SampleAdapter sampleAdapter = new SampleAdapter(this);
RecyclerView recyclerView = view.findViewById(R.id.sampleRecyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
recyclerView.setAdapter(sampleAdapter);
return view;
}
@Override
public void sampleOnClick(int position) {
Log.e("TAG", " from fragment / position:" + position);
mCallback.sampleOnClicked(position);
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
this.createCallbackToParentActivity();
}
private void createCallbackToParentActivity() {
try {
mCallback = (SampleOnClickedListener) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException(e.toString() + " must implement OnButtonClickedListener");
}
}
}
适配器:
public class SampleAdapter extends RecyclerView.Adapter<SampleAdapter.SampleRecyclerViewHolder> {
private final SampleRecyclerViewHolder.SampleOnListener mListener;
public SampleAdapter(SampleRecyclerViewHolder.SampleOnListener listener) {
this.mListener = listener;
}
@NonNull
@Override
public SampleRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
return new SampleRecyclerViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull SampleRecyclerViewHolder holder, int position) {
holder.itemView.setOnClickListener(v -> mListener.sampleOnClick(holder.getBindingAdapterPosition()));
}
@Override
public int getItemCount() {
// modify with real size
return 0;
}
public static class SampleRecyclerViewHolder extends RecyclerView.ViewHolder {
public SampleRecyclerViewHolder(@NonNull View itemView) {
super(itemView);
}
public interface SampleOnListener {
void sampleOnClick(int position);
}
}
}
如果我没记错的话,可以在活动和片段中检索点击的结果,这就是我所需要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.