如何“推送”片段?

Rob*_*Rob 1 android android-fragments

我主要是一名学习Android开发和片段的iOS开发人员。我有这个课:

public class MyTableFragment extends ListFragment
{
    List<String> dataList;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
    Bundle savedInstanceState) 
    { 
        dataList = new ArrayList<Item>();
        dataList.add("Row 1");
        dataList.add("Row 2");
        dataList.add("Row 3");
        dataList.add("Row 4");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(),
               android.R.layout.simple_list_item_1, dataList);  
        setListAdapter(adapter);  

        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) 
    {
        if(position == 0) {
            // What to do here? 
            // I have a MyNewFragment() class that I want to push
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在基本上onListItemClick我想做这样的事情(这就是我在iOS中所做的事情):

MyNewViewController *newViewController = [[MyNewViewController alloc] init];
[[self.navigationController pushViewController:newViewController] animated:YES];
Run Code Online (Sandbox Code Playgroud)

以前,我在使用Activity时曾在Android中这样使用过:

Intent intent = new Intent(getApplicationContext(), MyNewActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但是看起来现在我最好改用Fragments,而且我不知道该怎么做。谢谢

Ill*_*ent 5

我认为您想在itemClick方法中显示一个新片段。您可以使用类似这样的东西。

FragmentTransaction fragmentTransaction = getSupportFragmentManager()
                    .beginTransaction();
Fragment profileFragment = new ProfileFragment();//the fragment you want to show
profileFragment.setArguments(bundle);
fragmentTransaction
    .replace(R.id.content_frame, profileFragment);//R.id.content_frame is the layout you want to replace
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

从评论更新

通常,一个Fragment不应处理将自己替换为另一个Fragment的代码。应该通过与活动进行通信来完成,活动应该对其进行处理。片段应该是自包含的,并且不了解其他片段。如果一个片段具有用另一个特定的片段替换自己的代码,这将意味着该片段将无法按原样重复使用。

  • 通常,一个Fragment不应处理将自己替换为另一个Fragment的代码。应该通过与活动进行通信来完成,活动应该对其进行处理。片段应该是自包含的,并且不了解其他片段。如果一个片段具有用另一个特定的片段替换自己的代码,这将意味着该片段将无法按原样重复使用。 (3认同)