getSupportFragmentManager()不处理片段类的onCreateView()方法。

时间:2015-11-11 15:33:50

标签: java android android-fragments bundle

Goodevening。我在stackoverflow和一些有关片段的教程文章和网站上已经阅读了几个问题。我目前正在将第一个片段类的一些数据传递给第二个片段类。但是我在捆绑中的事务中遇到了一些错误,它在错误中表示方法getSupportFragmentManager()方法是未定义的。

 getSupportFragmentManager().beginTransaction()
         .replace(R.id.content_frame, cblf).commit();

解决此问题的最佳方法是什么? 无论如何,这是我的整个代码,

package com.example.navigationdrawerexample;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class CollegeBulletinFragment extends Fragment implements OnClickListener {

    Button ccs;
    Button coe;
    Button coed;
    Button con;
    Button cba;
    Button cas;
    Button cihm;
    Button gn;
    public CollegeBulletinFragment(){   
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_collegebulletin, container, false);

        gn = (Button) rootView.findViewById(R.id.gn);
        ccs = (Button) rootView.findViewById(R.id.ccs);
        coe = (Button) rootView.findViewById(R.id.coe);
        coed = (Button) rootView.findViewById(R.id.coed);
        con = (Button) rootView.findViewById(R.id.con);
        cba = (Button) rootView.findViewById(R.id.cba);
        cas = (Button) rootView.findViewById(R.id.cas);
        cihm = (Button) rootView.findViewById(R.id.cihm);

        gn.setOnClickListener(this);
        ccs.setOnClickListener(this);
        coe.setOnClickListener(this);
        coed.setOnClickListener(this);
        con.setOnClickListener(this);
        cba.setOnClickListener(this);
        cas.setOnClickListener(this);
        cihm.setOnClickListener(this);

        return rootView;
    }

    @Override
    public void onClick(View arg0) {
        String passingword = "";
        switch (arg0.getId()){
        case R.id.ccs:
            passingword = "CCS";
            break;
        case R.id.coe:
            passingword = "COE";
            break;
        case R.id.gn:
            passingword = "GN";
            break;
        case R.id.coed:
            passingword = "COED";
            break;
        case R.id.con:
            passingword = "CON";
            break;
        case R.id.cba:
            passingword = "CBA";
            break;
        case R.id.cas:
            passingword = "CAS";
            break;
        case R.id.cihm:
            passingword = "CIHM";
            break;

        }

        CollegeBulletinListFragment cblf = new CollegeBulletinListFragment();
        Bundle args = new Bundle();
        args.putString("passingWord", passingword);
        cblf.setArguments(args);

         getSupportFragmentManager().beginTransaction()
         .replace(R.id.content_frame, cblf).commit();
    }
}

4 个答案:

答案 0 :(得分:2)

  

错误,方法getSupportFragmentManager()方法未定义

由于getSupportFragmentManager()类中的Fragment方法不可用,因此它位于FragmentActivity中,因此请使用getActivity()来访问它。如:

getActivity().getSupportFragmentManager().beginTransaction()
         .replace(R.id.content_frame, cblf).commit();

答案 1 :(得分:2)

您必须使用支持库android.support.v4...才能使用getSupportFragmentManager()

答案 2 :(得分:2)

getSupportFragmentManager()上定义了

AppCompatActivity,以避免与本机(非支持)getFragmentManager()发生冲突。但是,对于支持Fragment类,没有现有的冲突方法,因此您应该使用:

getFragmentManager()

获取托管Activity的{​​{1}},或者使用:

FragmentManager

getChildFragmentManager()自己的Fragment(用于嵌套FragmentManager s)

答案 3 :(得分:1)

Fragment,"常规"有两种类型,导入声明为android.app.Fragment,"支持",{{1 }}。您的android.support.v4.app.Fragment不是"支持" Fragment,代码中的Fragment证明了这一点:

import declaration

其次,您从package com.example.navigationdrawerexample; **import android.app.Fragment;** import android.os.Bundle; 访问getSupportFragmentManager()(因此任何扩展FragmentActivity的类,例如FragmentActivityActionBarActivity

首先,您应该将导入声明更改为AppCompatActivity

然后,您应该确保托管android.support.v4.app.Fragment的{​​{1}}是Activity(或Fragment等)

最后,在FragmentActivity内,您应该可以致电AppCompatActivity

您还可以浏览Communicating with Other Fragments的文档,因为我个人会通过界面({{3}从Fragment而不是getActivity().getSupportFragmentManager()本身执行您的问题中的代码。显示此技术的相关问题。)