android - 主细节中的变量mTwoPane不会改变

时间:2017-04-13 17:19:56

标签: android android-layout master-detail android-orientation

我尝试使用masterDetail布局尽可能减负,试图了解它们的默认结构。

我在三星S5上尝试应用。

应用程序正常工作,但在横向模式下,不会在版面的右侧部分添加片段。

我认为问题是变量mTwoPane没有改变值,保持为假,这是因为findViewById(R.id.pokemon_detail_container)!= null显然是假的。

这是代码:

MainActivity中onCreate内的块:

        if (findViewById(R.id.detail_container) != null) {
        // The detail container view will be present only in the
        // large-screen layouts (res/values-w900dp).
        // If this view is present, then the
        // activity should be in two-pane mode.
        mTwoPane = true;
    }

评论是默认的。

activity_detail.xml中的detail_conter:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.soissy.masterdetail.DetailActivity"
tools:ignore="MergeRootFrame">

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/app_bar_height"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:toolbarId="@+id/toolbar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/detail_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView
    android:id="@+id/detail_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

这是代码点,如果mTwoPane为true,我添加片段。此方法位于MainActivity内部的内部类中:

        public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.mItem = mValues.get(position);
        holder.mIdView.setImageResource(mValues.get(position).id);
        holder.mNameView.setText(mValues.get(position).name);


        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mTwoPane) Log.d("mTwoPane", "is true");
                else Log.d("mTwoPane", "is false");
                if (mTwoPane) {
                    Bundle arguments = new Bundle();
                    arguments.putInt(DetailFragment.ARG_ITEM_ID, holder.mItem.id);
                    DetailFragment fragment = new DetailFragment();
                    fragment.setArguments(arguments);
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.detail_container, fragment)
                            .commit();
                } else {
                    Context context = v.getContext();
                    Intent intent = new Intent(context, DetailActivity.class);
                    intent.putExtra(DetailFragment.ARG_ITEM_ID, holder.mItem.id);

                    context.startActivity(intent);
                }
            }
        });
    }

我不明白我要做的是添加片段(mTwoPane = true)

3 个答案:

答案 0 :(得分:0)

您可能没有选择您认为自己的布局。请确保您遵循有关如何Support Multiple Screens的文档。测试Android是否正在选择您期望的布局的一种简单方法是更改​​该布局文件中的某些内容,并且仅显示该文件,这在显示时对您来说是显而易见的 - 例如,颜色或文本。如果您没有看到更改,那么您不会看到您认为的布局。

答案 1 :(得分:0)

我弄明白了这个问题。当您使用Android Studio创建MasterDetail&#34;活动&#34;在开始时,它会自动为两个窗格模式创建布局。但是,我认为仅适用于平板电脑,因为此布局的具体选项是&#34; w900dp&#34;。所以我为横向模式创建了另一个布局。然后使用w900dp&#34;从布局中复制并粘贴#34;到我的横向横向布局,现在一切正常。

答案 2 :(得分:0)

我有同样的问题布尔总是假的,但在我的情况下,我有适配器作为一个单独的java文件所以在我的列表片段中实现了一个实例callbck然后我移动了这个

如果findViewById R.id.detail_container!= null     mTwoPane = true;

在If(mTwopane)之前进入我的onclick回调。它现在可以工作,我可以在风景中和当我翻转到肖像时查看Twopane。详细的行为启动所以这个问题,检查视图是否!= null的条件没有被运行,为什么布尔值保持为假我希望这有助于一个人