在ArrayAdapter中启动片段

时间:2015-08-19 08:25:08

标签: java android gridview fragment android-arrayadapter

我有一个使用ArrayAdapter填充的gridview。在GridView中,我有一个Button和ImageView。我为Button和Image制作了一个Listener,但是一旦我点击了ImageView,我就想开始一个Fragment。我在使用getSupportFragmentManager();时遇到了错误。

holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            DetailsFragment fragment = new DetailsFragment();
            fragmentTransaction.replace(R.id.fragment_container, fragment);
            fragmentTransaction.commit();
        }
    });

更新

这是我的ArrayAdapter类的代码

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

import java.util.List;


public class MyAdapter extends ArrayAdapter<RowItem> {
    Context context;
    int imgId;



public MyAdapter(Context context, int resourceId, List<RowItem> items){
    super(context, resourceId, items);
    this.context = context;
}


private class ViewHolder{
    ImageView imageView;
    Button btn;
    TextView textView;
}

public View getView(int position, View convertView, ViewGroup parent){
    ViewHolder holder = null;
    RowItem rowItem = getItem(position);

    LayoutInflater inflater = (LayoutInflater)        context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null){
        convertView = inflater.inflate(R.layout.grid_item, null);
        holder = new ViewHolder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.img);
        holder.btn = (Button) convertView.findViewById(R.id.btnPocket);
        holder.textView = (TextView) convertView.findViewById(R.id.tv);
        convertView.setTag(holder);
    }
    else
        holder = (ViewHolder) convertView.getTag();

    Picasso.with(context)
            //.load("http://www.balay-indang.com/megamobile/pics/"+   String.valueOf(position+1) +".png")
            .load(rowItem.getImgUrl())
            .resize(200,150)
            .centerCrop()
            .into(holder.imageView);
    holder.textView.setText(rowItem.getText());
    holder.btn.setBackgroundResource(rowItem.getPocketId());

    final String pos = String.valueOf(position);

    holder.btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getContext(), "Pocket: "+ pos,   Toast.LENGTH_LONG).show();
        }
    });
    holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction =   fragmentManager.beginTransaction();
            DetailsFragment fragment = new DetailsFragment();
            fragmentTransaction.replace(R.id.fragment_container, fragment);
            fragmentTransaction.commit();
        }
    });

    return convertView;

}

}

3 个答案:

答案 0 :(得分:2)

您只能从FragmentActivity类访问getSupportedFragmentManager。 如果您必须在适配器中访问getSupportedFragmentManager,那么您已通过构造函数传递活动的实例。

getSupportFragmentManager()仅为FragmentActivity类定义。

修改

如果您的MainActivity扩展了ActionBarActivity,请尝试此操作。

holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fragmentManager = ((ActionBarActivity) context).getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            DetailsFragment fragment = new DetailsFragment();
            fragmentTransaction.replace(R.id.fragment_container, fragment);
            fragmentTransaction.commit();
        }
    });

希望这有帮助!

答案 1 :(得分:0)

您当前的活动是否为&#34;片段&#34;活动?

答案 2 :(得分:0)

您的活动需要扩展和继承自 FragmentActivity 的活动,以便使getSupportFragmentManager()和其他支持方法可用。

在我回答时,您的活动应该扩展 AppCompatActivity 。还要确保相关导入使用支持类,例如

private static boolean _menuNeedsUpdate = false;
private static Boolean _userIsLoggingIn = Boolean.valueOf(false);