如何“推”一个片段?

时间:2014-08-04 06:42:47

标签: 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
        }
    }
}

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

MyNewViewController *newViewController = [[MyNewViewController alloc] init];
[[self.navigationController pushViewController:newViewController] animated:YES];

在我使用Activity:

之前,我曾经在Android中使用它
Intent intent = new Intent(getApplicationContext(), MyNewActivity.class);
startActivity(intent);

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

2 个答案:

答案 0 :(得分: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();

更新来自评论:

作为一般规则,Fragment不应该处理用另一个Fragment替换自己的代码。它应该通过与Activity通信来完成,Activity应该处理它。碎片应该是自包含的,不了解其他碎片。如果Fragment具有用另一个特定片段替换自身的代码,则意味着Fragment将不会被重复使用。

答案 1 :(得分:0)

您仍然可以在Fragment内托管MyNewActivity,方法是使用<fragment />标记将其合并到布局XML文件中,或者手动实例化并添加到布局中。从UX的角度来看,这也是正确的方法。