按标签而不是ID刷新片段

时间:2012-11-16 00:22:56

标签: android android-layout

我在“ActionBarMain.java”中创建了以下片段

    FragMent1 fram1;

FragmentTransaction fragMentTra = null;

public void onTabSelected(Tab tab, FragmentTransaction ft) {

    if (tab.getText().equals("Collection")) {
        try {
            rl.removeAllViews();
        } catch (Exception e) {
        }
        fram1 = new FragMent1();
        fragMentTra.addToBackStack(null);
        fragMentTra = getFragmentManager().beginTransaction().add(rl.getId(), fram1);
        fragMentTra.commit();

}

//And in here I create a new activity
         Intent intent = new Intent(this, AddBookActivity.class);
         startActivity(intent);

很自然地,我应该能够执行findFragmentByTag(fram1)

现在我在“AddBookActivity”中并向fram1simple_list_item_1中输出的arraylist添加了一个新项目,所以现在我要刷新fram1,我该如何在AddBookActivity中执行此操作??

//AddBookActivity.java
@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.addBook:
                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                Fragment newFragment = new FragMent1();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                //How do I find out the fragment id from findFragmentByTag(fram1)????
                transaction.replace(R.id.your_fragment_id, newFragment);//Whats the id, I have the Tag that is fram1
                transaction.addToBackStack(null);
                transaction.commit();
                return true; 
            case R.id.cancel:
                super.finish(); 
                return (true);

            }

            return (super.onOptionsItemSelected(item));
        }

1 个答案:

答案 0 :(得分:0)

findFragmentByTagString作为参数,而不是Fragment

所以你要使用

fragMentTra = getFragmentManager().beginTransaction().add(rl.getId(), fram1, "fram1");

添加,并使用

替换
transaction.replace(R.id.your_fragment_id, newFragment, "fram1");

找到片段,使用

findFragmentByTag("fram1");

这是否会更新您的列表是另一回事,因为您发布的代码没有解决这个问题。

编辑:

您的Activity可以加载多个Fragments,因此Activity布局取决于屏幕尺寸。最简单的用途是它只对一个Fragment足够大。此FragmentFragmentList或包含ListView。该列表需要Adapter将数据绑定到列表。简单示例是ArrayAdapter类型String,例如ArrayAdapter<String>。您指定ListView以使用ArrayAdapter作为其数据源。然后,您可以直接更改ArrayAdapter的底层数据(ArrayList<String>String[])(要求适配器通知更改)或通过适配器本身。通过扩展适配器类可以实现更复杂的视图。

我建议您查看ListViewFragmentList SDK示例。