Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ArrayAdapter中启动一个片段_Java_Android_Gridview_Fragment_Android Arrayadapter - Fatal编程技术网

Java 在ArrayAdapter中启动一个片段

Java 在ArrayAdapter中启动一个片段,java,android,gridview,fragment,android-arrayadapter,Java,Android,Gridview,Fragment,Android Arrayadapter,我有一个用ArrayAdapter填充的gridview。在GridView中,我有一个按钮和ImageView。我为按钮和图像制作了一个侦听器,但是我想在点击ImageView后启动一个片段。我在使用getSupportFragmentManager()时出错 更新 这是我的ArrayAdapter类的代码 import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTr

我有一个用ArrayAdapter填充的gridview。在GridView中,我有一个按钮和ImageView。我为按钮和图像制作了一个侦听器,但是我想在点击ImageView后启动一个片段。我在使用getSupportFragmentManager()时出错

更新

这是我的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;

}
导入android.app.Activity;
导入android.app.FragmentManager;
导入android.app.FragmentTransaction;
导入android.content.Context;
导入android.support.v4.app.FragmentActivity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.squareup.picasso.picasso;
导入java.util.List;
公共类MyAdapter扩展了ArrayAdapter{
语境;
int imgId;
公共MyAdapter(上下文上下文、int-resourceId、列表项){
超级(上下文、资源ID、项目);
this.context=上下文;
}
私有类视窗持有者{
图像视图图像视图;
按钮btn;
文本视图文本视图;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
RowItem RowItem=getItem(位置);
LayoutInflater充气器=(LayoutInflater)context.getSystemService(Activity.LAYOUT\u充气器\u SERVICE);
if(convertView==null){
convertView=充气机。充气(R.layout.grid_项,空);
holder=新的ViewHolder();
holder.imageView=(imageView)convertView.findViewById(R.id.img);
holder.btn=(按钮)convertView.findViewById(R.id.btnPocket);
holder.textView=(textView)convertView.findViewById(R.id.tv);
convertView.setTag(支架);
}
其他的
holder=(ViewHolder)convertView.getTag();
毕加索。与(上下文)
//.加载(“http://www.balay-indang.com/megamobile/pics/“+String.valueOf(位置+1)+.png”)
.load(rowItem.getImgUrl())
.调整大小(200150)
.centerCrop()
.插入(支架.图像视图);
holder.textView.setText(rowItem.getText());
holder.btn.setBackgroundResource(rowItem.getPocketId());
最终字符串位置=字符串值(位置);
holder.btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getContext(),“Pocket:+pos,Toast.LENGTH_LONG).show();
}
});
holder.imageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){

FragmentManager FragmentManager=getSupportFragmentManager(); FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction(); DetailsFragment片段=新的DetailsFragment(); fragmentTransaction.replace(R.id.fragment\u容器,fragment); fragmentTransaction.commit(); } }); 返回视图; }

}

您当前的活动是“片段”活动吗?

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

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

android.support.v4.app.FragmentManager 

您只能从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();
        }
    });

希望这有帮助

您遇到了什么错误?无法解析方法“getSupportFragmentManager();您是否从活动中扩展FragmentActivity()??我会检查你的导入,确保你有android.support.v4.app.FragmentManager而不是android.app.FragmentManagerimported@GmloMalo我只是为当前和即将调用的片段扩展片段。那么您是从另一个片段调用detailedFragment?在这种情况下,您只能从扩展FragmentActivity的活动调用getSupportFragment管理器,因为该方法仅支持该活动?你检查导入了吗?是的,gridview在片段中。等等,你是说我应该将片段扩展到FragmentActivity?并用您的第一个代码段替换我的ArrayAdapter的默认构造函数?请参见编辑的答案。您的主要活动是扩展ActionBarActivity或AppCompatActivity还是其他什么?我已经提供了适配器的完整代码。你能进一步解释我需要改变什么吗?我已经删除了super()方法,但是它仍然返回一个错误。“没有可用的默认构造函数”。FragmentManager FragmentManager=((ActionBarActivity)上下文)。getSupportFragmentManager();正在获取错误:不兼容的类型。必需的android.app.FragmentManager。找到android.support.v4.app.FragmentManager。抱歉,我忘记提及我正在扩展MainActivity中的AppCompatActivity尝试getFragmentManager()而不是getSupportFragmentManager()
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();
        }
    });