通过Fragment中的Intent启动片段

Dav*_*804 27 android android-intent android-fragments

我想发布一个新片段来查看一些数据.目前,我有一个主要活动,其中包含一堆操作栏选项卡,每个选项卡都是一个片段.所以,在一个标签片段中,我有一个按钮,chartButton.我的onclicklistener都设置了它,这是onClick方法:

public OnClickListener chartsListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent chartFragment = new Intent();
        startActivity(chartFragment);   
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,正如我所说,这个监听器属于扩展Fragment的类.所以,我想通过意图更换整个屏幕来启动一个新的片段(chartsFragment).当用户点击回来时,它会将它们带回标签和主要活动.这是我的图表片段:

public class chartsFragment extends Fragment {

    public View onCreateView() {
        //LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState
        LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        return (inflater.inflate(R.layout.chartfragment, null));
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在处理的当前错误:"android.content.ActivityNotFoundException:找不到处理Intent {}的活动".这很好,我知道我可以使用getActivity().startActivity(chartsFragment),但这会导致相同的错误.我想我在这里寻找的是,如何从一个片段中启动一个导致打开新片段的意图?

sli*_*n77 54

问题的答案很简单:用Fragmentnew 替换当前的Fragment事务并将事务推送到backstack上.这样可以保留后退按钮的行为......

创造一个新的东西Activity真的打败了使用碎片的整个目的......非常适得其反.

@Override
public void onClick(View v) {
    // Create new fragment and transaction
    Fragment newFragment = new chartsFragment(); 
    // consider using Java coding conventions (upper first char class names!!!)
    FragmentTransaction transaction = getFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);

    // Commit the transaction
    transaction.commit(); 
}
Run Code Online (Sandbox Code Playgroud)

http://developer.android.com/guide/components/fragments.html#Transactions

  • 它的工作只有当两个片段都由同一个活动托管时 (2认同)

RaB*_*RaB 19

你无法打开新的碎片.片段需要始终由活动托管.如果片段处于相同的活动(例如制表符),那么后退键导航将变得棘手我假设您要打开具有该片段的新屏幕.

因此,您只需创建一个新活动并将新片段放在那里.然后,该活动将通过活动类明确地或通过intent filters 隐式地对意图做出反应.

  • 哇,这似乎有点过分了.为什么不用新的片段替换当前片段并将当前片段推到后台堆栈上?!?!?!http://developer.android.com/guide/components/fragments.html#Transactions (4认同)

Ami*_*wal 5

试试这可能会对你有所帮助:

public void ButtonClick(View view) {
    Fragment mFragment = new YourNextFragment(); 
    getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, mFragment).commit();
}
Run Code Online (Sandbox Code Playgroud)