ListFragment在手机上出现两次

时间:2015-06-03 21:40:36

标签: java android xml android-listview android-listfragment

当我在手机模拟器上运行我的应用时,我看到了我的列表片段的不受欢迎的外观。在平板电脑模拟器上它出现一次,但在手机模拟器上它出现两次。如何修复此错误,使列表仅出现在手机模拟器上一次?

MainActivity.java

public class MainActivity extends ActionBarActivity {

    private boolean mTwoPane;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentMainList newFragment = new FragmentMainList();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.master_container, newFragment);
        transaction.commit();

        if (findViewById(R.id.detail_container) != null) {
            mTwoPane = true;
        }
    }
}

activity_main.xml中

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/master_container"
    android:name="com.apptacularapps.exitsexpertlondonlite.FragmentMainList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FragmentMainList"
    tools:layout="@android:layout/list_content"/>

activity_main.xml(sw600dp)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:showDividers="middle"
    tools:context=".MainActivity" >

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/master_container"/>

    <FrameLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:id="@+id/detail_container"/>

</LinearLayout>

FragmentMainList.java

public class FragmentMainList extends android.support.v4.app.Fragment {

    ListView list_main;

    String[] listContent = {
            "Item 1",
            "Item 2",
            "Item 3"
    };

    private boolean mTwoPane;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_main_list, container, false);
        list_main = (ListView)v.findViewById(R.id.list_main);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,listContent);
        list_main.setAdapter(adapter);

        return v;
    }
}

2 个答案:

答案 0 :(得分:2)

请移动逻辑以在if循环中添加片段。

答案 1 :(得分:1)

虽然您已经了解了如何使其正常工作,但我将尝试解释如何使其正常工作。

你所做的事实上是这样的:

  • 如果在小屏幕上 - 静态添加片段(以XML格式)
  • 如果在更大的屏幕上 - 动态添加片段(使用FragmentTransaction)

看起来很奇怪,获得所需功能的方法取决于屏幕大小 - 这些因素之间应该没有相关性。

你应该做什么(恕我直言)是在两种情况下动态添加这个片段 - 只需将第一个XML中的Fragment标记更改为FrameLayout,一切都将按预期工作。