【问题标题】:Overlapping fragments when changing tabs?更改选项卡时重叠片段?
【发布时间】:2013-04-17 08:52:42
【问题描述】:

我的片段相互重叠时遇到问题。我有一个 Android ActionBar 选项卡,我正在使用ActionBarSherlock。当我选择其他选项卡时,来自ListFragment 的片段被放置在我的HomeFragment 之上。好像没有正确分离。

下面是HomeFragment的代码:

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 的代码:

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) {}

}

【问题讨论】:

    标签: android android-actionbar actionbarsherlock android-tabs


    【解决方案1】:

    我认为 HerbFragment 中的代码放错了位置,因为您应该在具有标签的活动/片段中处理标签内容,而不是在标签中。您可以通过两种不同的方式在 HomeFragment 中处理它:

    -当用户点击标签时,替换当前片段:只需将其更改为ft.replace(并删除ft.attach行):

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

    -附加新片段并分离前一个片段:如果您知道它是哪个片段,只需从附加片段中获取引用,并以与附加新片段相同的方法分离它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多