Java ListFragment在电话中出现两次

Java ListFragment在电话中出现两次,java,android,xml,android-listview,android-listfragment,Java,Android,Xml,Android Listview,Android Listfragment,当我在手机模拟器上运行我的应用程序时,我看到我的列表片段出现了不希望出现的外观。在平板电脑模拟器上显示一次,但在手机模拟器上显示两次。如何修复此错误,使列表仅在手机模拟器上显示一次 MainActivity.java public class MainActivity extends ActionBarActivity { private boolean mTwoPane; @Override protected void onCreate(Bundle savedI

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

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;
        }
    }
}
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;
    }
}
活动\u 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"/>

活动\u main.xml(sw600dp)


FragmentMainList.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;
        }
    }
}
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;
    }
}
公共类FragmentMainList扩展了android.support.v4.app.Fragment{
ListView列表_main;
字符串[]listContent={
“项目1”,
“项目2”,
“项目3”
};
私有布尔值窗格;
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.fragment\u main\u list,container,false);
list_main=(ListView)v.findviewbyd(R.id.list_main);
ArrayAdapter=newArrayAdapter(getActivity(),android.R.layout.simple\u list\u item\u 1,listContent);
列表_main.setAdapter(适配器);
返回v;
}
}

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

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

事实上,你所做的是:

  • 如果在小屏幕上-静态添加片段(XML格式)
  • 如果在更大的屏幕上-动态添加片段(使用FragmentTransaction)
获得所需功能的方法取决于屏幕大小,这看起来很奇怪——这些因素之间应该没有相关性


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

您能从布局文件夹发布activity\u main.XML吗?不,他们都在那里。这是我在布局文件夹中仅有的两个activity_main.xml文件。activity_main.xml来自我的layout文件夹。将它从fragment更改为RelativeLayout,然后看看会发生什么。好吧,它可以工作,但我老实说,我认为我必须使用Tagy?您正在为tablet UI使用RelativeLayout。如果没有,您可以使用以下代码:If(findViewById(R.id.detail_container)!=null{FragmentMainList newFragment=new FragmentMainList();FragmentTransaction=getSupportFragmentManager().beginTransaction();transaction.replace(R.id.master_container,newFragment);transaction.commit();mTwoPane=true;}