1

我遇到了我的片段互相重叠的问题。我有一个Android ActionBar选项卡,我正在使用ActionBarSherlock。当我选择其他选项卡时,ListFragment中的片段放在我的HomeFragment的顶部。这就像它没有正确分离。更改标签时重叠片段?

下面是HomeFragment代码:我想在你的HerbFragment代码missplaced因为你应该处理的标签的东西在活动/片段

public class HerbsFragment extends SherlockListFragment 
          implements ActionBar.TabListener { 

    /** An array of items to display in ArrayList */ 
    String apple_versions[] = new String[]{ 
      "Pancreas", 
      "Blood" 
    }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                Bundle savedInstanceState) { 
     /** Creating array adapter to set data in listview */ 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      getActivity().getBaseContext(), 
      android.R.layout.simple_list_item_1, 
      apple_versions); 

     /** Setting the array adapter to the listview */ 
     setListAdapter(adapter); 
     View v = inflater.inflate(R.layout.activity_main, container, false); 
     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     /** Setting the multiselect choice mode for the listview */ 
     getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.add(android.R.id.content, this,"apple"); 
     ft.attach(this); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.detach(this); 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) {} 

} 

回答

1

public class HomeFragment extends SherlockFragment 
          implements ActionBar.TabListener { 

    private View homeView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                Bundle savedInstanceState) { 
     homeView = inflater.inflate(R.layout.homefragment, container, false); 
     return homeView; 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.add(android.R.id.content, this,"apple"); 
     ft.attach(this); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {} 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) {} 

} 

代码HerbFragment有标签,不在标签中。你可以处理你的HomeFragment两种不同的方式:

- 当一个标签的用户点击,取代目前的片段:只是改变这一个ft.replace(和删除ft.attach线):

ft.add(android.R.id.content, this,"apple"); 
ft.attach(this); 

- 附加新的片段并分离之前的内容:如果知道它是哪个片段,请从附加的片段中获取参考,并使用与附加片段相同的方法将其分开。