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
RaB*_*RaB 19
你无法打开新的碎片.片段需要始终由活动托管.如果片段处于相同的活动(例如制表符),那么后退键导航将变得棘手我假设您要打开具有该片段的新屏幕.
因此,您只需创建一个新活动并将新片段放在那里.然后,该活动将通过活动类明确地或通过intent filters 隐式地对意图做出反应.
试试这可能会对你有所帮助:
public void ButtonClick(View view) {
Fragment mFragment = new YourNextFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, mFragment).commit();
}
Run Code Online (Sandbox Code Playgroud)