繁体   English   中英

片段不显示的原因

[英]Reason for a fragment to not show up

因此,我知道这里有一些主题对此提出了疑问,但似乎没有一个是引起我问题的原因。 我有一个ActionBarActivity,它将在几个不同的片段之间进行切换,但是在显示其中一个片段时遇到了问题。 该活动在首次加载时确实显示了一个片段,并且可以很好地执行此操作。 这是使用方法在初始片段之间切换的代码。

 @Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_container);
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("");
    if (savedInstanceState == null) navigateTo(START_SCREEN);
}

 public void navigateTo(int sectionNumber, Serializable objectParam) {
    Fragment fragment = null;
     switch (sectionNumber) {
           case START_SCREEN:
            fragment = createStartScreenFragment(); //returns an instance of the class for this fragment
            break;
        case SCREEN_TWO:
            fragment = createSecondScreenFragment(); //returns an instance of the class for this fragment
            break;
     }
    if (fragment == null) return;
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction trans = fm.beginTransaction();
    trans.add(R.id.activity_container, fragment, fragment.getTag());
    trans.commit();
    trans.show(fragment);
}

activity_containers.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical" android:id="@+id/activity_container"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

</FrameLayout>

成功加载的第一个片段

<GridLayout
    android:id="@+id/fragment_start_screen"
    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"
    tools:context="com.android.Activity">    
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        />
 ...
</GridLayout>

这是未显示的片段xml

<TextView android:id="@+id/section_label" android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
<ListView
    android:id="@+id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:fadingEdge="vertical"
    android:cacheColorHint="#00000000"
    android:fastScrollEnabled="true"
    android:padding="2dp">
</ListView>

以下是行为异常的片段相关代码:

public class SecondFragment extends Fragment {
    public final static int SECTION_NUMBER = 1;
    private String mTag = "TAG";
    private ParentActivity parentActivity;

    public SecondFragment() {

    }
    public static fragment  newInstance() {
        SecondFragment fragment = new SecondFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onAttach(final Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        parentActivity = (ParentActivity) getActivity();
        View rootView = inflater.inflate(R.layout.fragment_second_fragment, container, false);
        ListView list = (ListView) rootView.findViewById(R.id.list);

        return super.onCreateView(inflater, container, savedInstanceState);
    }
}

我在这里遇到的最大问题是没有显示错误消息。 第一个片段中的文本视图应该触发第二个片段以显示在屏幕上。 当我将该片段作为DialogFragment并在其实例上调用.show()时,此方法就可以工作。 我现在需要将其作为常规片段,并且不会出现。 我看不到任何错误消息,尽管调试它确实可以证明它已成功在我的所有代码中运行,并且看起来好像正确地放大了视图。

那么,在这里我可能会缺少什么阻止片段显示?

您的布局

<TextView android:id="@+id/section_label" android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
<ListView
    android:id="@+id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:fadingEdge="vertical"
    android:cacheColorHint="#00000000"
    android:fastScrollEnabled="true"
    android:padding="2dp">
</ListView>

应该在ViewGroup中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
  <TextView android:id="@+id/section_label" android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
  <ListView
    android:id="@+id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:fadingEdge="vertical"
    android:cacheColorHint="#00000000"
    android:fastScrollEnabled="true"
    android:padding="2dp">
  </ListView>
</LinearLayout>

并且您应该在onCreateView()返回rootView

另外,您可能需要使用Fragment Manager的replace方法将一个片段替换为另一个片段,而不是add

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM