我主要是一名学习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,而我不知道该怎么做。感谢
答案 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的角度来看,这也是正确的方法。