如何从图像适配器启动片段?

时间:2017-05-03 22:21:53

标签: android

我想在点击ImageAdapter类中的imageView时打开一个新片段。但是,我似乎无法做到这一点。我是android studio的新手,所以也许我错过了一些重要的信息。您对如何操作有任何建议吗?我曾尝试使用片段事务来启动它们但是我似乎做得不多,因为我不在片段类本身或活动中。

图像适配器类

public class ImageAdapter extends BaseAdapter { 
private Context mContext;

public ImageAdapter(Context c) {
    mContext = c;
}

public int getCount() {
    return mThumbIds.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

// create a new ImageView for each item referenced by the Adapter
public View getView(final int position, final View convertView, final ViewGroup parent)
{
    ImageView imageView;
    if(convertView == null)
    {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(300,300));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8,8,8,8);
    }
    else
    {
        imageView = (ImageView) convertView;
    }
    imageView.setImageURI(mThumbIds[position]);
    //check for tap
    if(imageView.getDrawable() != null)
    {
        imageView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(mContext, "clicked", Toast.LENGTH_SHORT).show();
                       **//LAUNCH FRAGMENT HERE.** 
            }
        });
    }
    return imageView;
}



private Uri[] mThumbIds = new Uri[20];

public void setUriArr(Uri[] uriArr){
    this.mThumbIds = uriArr;
}

}

1 个答案:

答案 0 :(得分:0)

  

我曾尝试使用片段事务来启动它们但是我似乎做不了多少,因为我不在片段类本身或活动中。

您只需传入FragmentManager

即可
public class ImageAdapter extends BaseAdapter { 
    private Context mContext;
    private FragmentManager mFragManager;

    public ImageAdapter(Context c, FragmentManager fm) {
        mContext = c;
        mFragManager = fm;   
    }

然后在别处使用它来进行片段事务。

无论您在何处创建适配器,都应该通过Activity或Fragment本身访问FragmentManager。

确保您在此处使用正确的导入,具体取决于您是否要使用支持碎片。