从 class 扩展 RecyclerView.ViewHolder 开始 DialogFragment
Starting DialogFragment from a class extending RecyclerView.ViewHolder
我在 recyelerview.viewholder class.
的 onClick() 方法中尝试了以下方法
示例中使用的 SampleDialogFragment 扩展了 DialogFragment。
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
df.show(v.getContext().getSupportFragmentManager(), "Dialog");
}
我在 v.getContext().getSupportFragmentManager()
遇到问题。我无法调用 getSupportFragmentManager()。
我也试过如下。
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
SampleActivity activity = new SampleActivity();
df.show(activity.getSupportFragmentManager(), "Dialog");
}
SampleActivity 是 activity 附加的回收器视图。它没有显示错误。当我 运行 应用程序崩溃时。
日志显示 activity 已销毁。
有什么解决办法吗?
正确的方法是使用接口。
public interface OnItemClickListener {
void onItemClicked(View v);
}
并在触发 onClick 方法时调用接口方法。
public class YourListAdapter extends RecyclerView.Adapter<...>
//your code
private OnItemClickListener listener;
public YourListAdapter(OnItemClickListener listener /*your additional parameters*/) {
this.listener = listener;
//...
}
@Override
public void onClick(View v){
listener.onItemClicked(View v);
}
}
您必须从 SampleActivity
传递 OnItemClickListener
接口实例
并让它在您的 SampleActivity
中实施
public class SampleActivity extends FragmentActivity implements OnItemClickListener {
@Override
public void onItemClicked(View v) {
SampleDialogFragment df= new SampleDialogFragment();
df.show(getSupportFragmentManager(), "Dialog");
}
}
我使用它的最简单方法
public class AdapterProduct extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
FragmentManager FragManager ;
// in constructor
public AdapterProduct(Context context, RecyclerView view ,
ArrayList<Product> items , FragmentManager getSupportFragmentManager) {
this.items = items;
ctx = context;
FragManager = getSupportFragmentManager;
lastItemViewDetector(view);
}
}
在点击时
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
SampleActivity activity = new SampleActivity();
df.show(FragManager , "Dialog");
}
在您的 MainActivity 中或您设置回收视图的地方
AdapterProduct mAdapter = new AdapterProduct(MainActivity.this, rv_Daily_Deals,
BeanProduct,getSupportFragmentManager());
我在 recyelerview.viewholder class.
的 onClick() 方法中尝试了以下方法示例中使用的 SampleDialogFragment 扩展了 DialogFragment。
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
df.show(v.getContext().getSupportFragmentManager(), "Dialog");
}
我在 v.getContext().getSupportFragmentManager()
遇到问题。我无法调用 getSupportFragmentManager()。
我也试过如下。
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
SampleActivity activity = new SampleActivity();
df.show(activity.getSupportFragmentManager(), "Dialog");
}
SampleActivity 是 activity 附加的回收器视图。它没有显示错误。当我 运行 应用程序崩溃时。
日志显示 activity 已销毁。
有什么解决办法吗?
正确的方法是使用接口。
public interface OnItemClickListener {
void onItemClicked(View v);
}
并在触发 onClick 方法时调用接口方法。
public class YourListAdapter extends RecyclerView.Adapter<...>
//your code
private OnItemClickListener listener;
public YourListAdapter(OnItemClickListener listener /*your additional parameters*/) {
this.listener = listener;
//...
}
@Override
public void onClick(View v){
listener.onItemClicked(View v);
}
}
您必须从 SampleActivity
OnItemClickListener
接口实例
并让它在您的 SampleActivity
public class SampleActivity extends FragmentActivity implements OnItemClickListener {
@Override
public void onItemClicked(View v) {
SampleDialogFragment df= new SampleDialogFragment();
df.show(getSupportFragmentManager(), "Dialog");
}
}
我使用它的最简单方法
public class AdapterProduct extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
FragmentManager FragManager ;
// in constructor
public AdapterProduct(Context context, RecyclerView view ,
ArrayList<Product> items , FragmentManager getSupportFragmentManager) {
this.items = items;
ctx = context;
FragManager = getSupportFragmentManager;
lastItemViewDetector(view);
}
}
在点击时
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
SampleActivity activity = new SampleActivity();
df.show(FragManager , "Dialog");
}
在您的 MainActivity 中或您设置回收视图的地方
AdapterProduct mAdapter = new AdapterProduct(MainActivity.this, rv_Daily_Deals,
BeanProduct,getSupportFragmentManager());