我如何打开RecyclerView适配器内DialogFragment,或者我怎么做它通过主要活动? 我需要通过单击被添加到RecyclerView每个视图中打开它。
Answer 1:
这是recyclerView项目单击事件打交道时,我通常做的:
创建点击监听器后重新使用。
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
@SuppressWarnings("CanBeFinal")
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
@SuppressWarnings("CanBeFinal")
private GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}}
然后在你的活动中使用它,这样做:
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
showDialog();
}
}));
我希望这有帮助!
Answer 2:
里面你RecyclerviewAdapter,并在视图(即点击显示该对话框中的视图)的onclick方法,U可以将下面的代码。 编辑:
MyDialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(((Activity) context).getSupportFragmentManager(), "Title");
注:“上下文”是活动的,从创建recyclerview文意。 (上下文变量如RecyclerviewAdapter的cnstructor参数传递。)
注2:MyDialogFragment,就是你创造了一个dialogfragment。 在这种MyDialogFragmentü应具有构造函数的newInstance()
该MyDialogFragment可以是这样的:
public class MyDialogFragment extends DialogFragment {
public static MyDialogFragment newInstance() {
MyDialogFragment frag = new MyDialogFragment();
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.fragment_myDialog, null))
.setTitle("Title")
...
// Set ur code
return builder.create();
}
}
所以现在对于如何通过上下文,从在MainActivity,当u创建适配器n中的活动范围内,美传递给适配器的情况下即时谈论。 例如:“本”在下面的代码,就是你会被传递给你的适配器活动场景。 这个代码存在于UR MainActivity。
MyAdapter adapter1 = new MyAdapter(this, array_list);
mRecyclerView.setAdapter(adapter1);
Answer 3:
在DialogFragment设置此:
public static myFragment newInstance() {
return new myFragment();
}
在适配器上设置这样的:
public Activity mcontext;
public SubjectsAdapter(Activity context) {
// Here we're getting the activity's context,
// by setting the adapter on the activity with (this)
this.mcontext=context;
}
显示它在通过这样的适配器:
myFragment newFragment = myFragment.newInstance();
newFragment.show(mcontext.getFragmentManager(), "Title");
文章来源: Android: open dialog on adapter