我有平板电脑布局和手机布局,我需要我的平板电脑来检测是否存在某个视图以确定是执行平板电脑代码还是电话代码。
附加片段的Activity中的此代码返回true,但片段中的相同代码返回false。
mTwoPane = view.findViewById(R.id.detail_container) != null;
造成这种情况可能会发生什么?我尝试过mTwoPane = getActivity().getRootView().findViewById(R.id.detail_container) != null;
这样的事情而没有运气。
我的手机的activity_main.xml:
<fragment 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:id="@+id/mainfragment"
android:name="com.project.MainFragment"
tools:context="com.project.MainFragment"/>
平板电脑的my activity_main:
<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:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
tools:context="com.project.MainActivity">
<fragment
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:id="@+id/mainfragment"
android:name="com.project.MainFragment" />
<FrameLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:id="@+id/detail_container"/>
</LinearLayout>
我的主要活动onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (findViewById(R.id.detail_container) != null) {
mTwoPane = true;
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.detail_container, new DetailFragment(), DETAILFRAGMENT_TAG)
.commit();
}
} else {
mTwoPane = false;
}
Log.e(TAG, Boolean.toString(mTwoPane));
}
My Fragment&on onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
mTwoPane = view.findViewById(R.id.detail_container) != null;
Log.e(TAG, Boolean.toString(mTwoPane));
return view;
}