我尝试使用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)
答案 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的条件没有被运行,为什么布尔值保持为假我希望这有助于一个人