从扩展RecyclerView.ViewHolder的类启动DialogFragment

时间:2015-11-24 09:09:00

标签: android android-recyclerview android-dialogfragment dialogfragment

我在recyelerview.viewholder类的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是回收站视图附加的活动。它没有显示错误。当我运行应用程序并崩溃时。

日志显示活动已经破坏。

任何解决方案?

2 个答案:

答案 0 :(得分:6)

正确的方法是使用界面。

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);
}
}

您必须从OnItemClickListener

传递SampleActivity接口实例

让它在您的SampleActivity

中实施
public class SampleActivity extends FragmentActivity implements OnItemClickListener {

    @Override
    public void onItemClicked(View v) {
        SampleDialogFragment df= new SampleDialogFragment();
        df.show(getSupportFragmentManager(), "Dialog");
    }
}

答案 1 :(得分:1)

我最简单的使用方式

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);
    }
}

在onClick

@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());
相关问题