java - 在 ArrayAdapter 内启动 fragment

标签 java android gridview fragment android-arrayadapter

我有一个用 ArrayAdapter 填充的 gridview。在 GridView 中,我有一个 Button 和 ImageView。我为按钮和图像创建了一个监听器,但是我想在点击 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;

}

}

最佳答案

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

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

希望这有帮助!

关于java - 在 ArrayAdapter 内启动 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090226/

相关文章:

java - 找到两个数组中最大的数字

java - 使用正则表达式从代码语句中提取变量

java - 如何使用mockito抛出HttpClientErrorException.Unauthorized错误

android - QML 中的多页应用程序

php - yii2 gridview 过滤第二个表列上的计数/总和

c# - 如何操作gridview的各个组标题

java - EclipseLink:类型的指示器字段值缺少类

java - 如何在不知道 Gson key 的情况下解析 JsonObject 列表?

java - SequenceEntityModifier 中的 onUpdate

java - 如何使用Java代码在Android中将复选框添加到 'Grid View'