Java RecyclerView未在单击项目时将详细信息窗格替换为片段

Java RecyclerView未在单击项目时将详细信息窗格替换为片段,java,android,listview,arraylist,master-detail,Java,Android,Listview,Arraylist,Master Detail,每次我单击平板电脑上的“回收者视图”项目时,它都会打开一个活动,而不是用片段替换详细信息窗格 以下代码行是我用来检测是否存在详细信息窗格的代码: mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null; 关于正确放置这行代码的位置有什么想法吗 活动XML <?xml version="1.0" encoding="utf-8"?> <LinearL

每次我单击平板电脑上的“回收者视图”项目时,它都会打开一个活动,而不是用片段替换详细信息窗格

以下代码行是我用来检测是否存在详细信息窗格的代码:

mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null;
关于正确放置这行代码的位置有什么想法吗

活动XML

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

    <android.widget.Toolbar
        android:id="@+id/masterToolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        >


        <LinearLayout
            android:id="@+id/singleline_text_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <TextView
                android:id="@+id/md_toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@android:style/TextAppearance.Material.Widget.ActionBar.Title"/>
        </LinearLayout>

    </android.widget.Toolbar>


    <RelativeLayout
        android:id="@+id/master_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.widget.Toolbar
        android:id="@+id/masterToolbar"
        android:layout_width="0dp"
        android:layout_height="?actionBarSize"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/detailBackgroundToolbar"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintTop_toTopOf="parent">


        <LinearLayout
            android:id="@+id/singleline_text_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <TextView
                android:id="@+id/md_toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@android:style/TextAppearance.Material.Widget.ActionBar.Title"/>
        </LinearLayout>

    </android.widget.Toolbar>


    <RelativeLayout
        android:id="@+id/master_container"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/divider"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/masterToolbar" />

    <View
        android:id="@+id/divider"
        android:layout_width="1dp"
        android:layout_height="0dp"
        android:background="?attr/dividerColor"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/masterToolbar"
        app:layout_constraintTop_toBottomOf="@+id/masterToolbar" />

    <android.widget.Toolbar
        android:id="@+id/detailBackgroundToolbar"
        android:layout_width="0dp"
        android:layout_height="?actionBarSize"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_weight="3"
        app:layout_constraintStart_toEndOf="@+id/masterToolbar"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v7.widget.CardView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_margin="4dp"
        app:cardCornerRadius="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/divider"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent="0.5">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <include layout="@layout/toolbar_dualline"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

            <FrameLayout
                android:id="@+id/detail_container"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>

    </android.support.v7.widget.CardView>

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/divider"
        app:layout_constraintTop_toBottomOf="@+id/detailBackgroundToolbar" />

</android.support.constraint.ConstraintLayout>

sw600dp活动XML

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

    <android.widget.Toolbar
        android:id="@+id/masterToolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        >


        <LinearLayout
            android:id="@+id/singleline_text_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <TextView
                android:id="@+id/md_toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@android:style/TextAppearance.Material.Widget.ActionBar.Title"/>
        </LinearLayout>

    </android.widget.Toolbar>


    <RelativeLayout
        android:id="@+id/master_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.widget.Toolbar
        android:id="@+id/masterToolbar"
        android:layout_width="0dp"
        android:layout_height="?actionBarSize"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/detailBackgroundToolbar"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintTop_toTopOf="parent">


        <LinearLayout
            android:id="@+id/singleline_text_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <TextView
                android:id="@+id/md_toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@android:style/TextAppearance.Material.Widget.ActionBar.Title"/>
        </LinearLayout>

    </android.widget.Toolbar>


    <RelativeLayout
        android:id="@+id/master_container"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/divider"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/masterToolbar" />

    <View
        android:id="@+id/divider"
        android:layout_width="1dp"
        android:layout_height="0dp"
        android:background="?attr/dividerColor"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/masterToolbar"
        app:layout_constraintTop_toBottomOf="@+id/masterToolbar" />

    <android.widget.Toolbar
        android:id="@+id/detailBackgroundToolbar"
        android:layout_width="0dp"
        android:layout_height="?actionBarSize"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_weight="3"
        app:layout_constraintStart_toEndOf="@+id/masterToolbar"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v7.widget.CardView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_margin="4dp"
        app:cardCornerRadius="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/divider"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent="0.5">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <include layout="@layout/toolbar_dualline"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

            <FrameLayout
                android:id="@+id/detail_container"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>

    </android.support.v7.widget.CardView>

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/divider"
        app:layout_constraintTop_toBottomOf="@+id/detailBackgroundToolbar" />

</android.support.constraint.ConstraintLayout>

片段类

public class MyFragment extends Fragment {

    public MyFragment() {}

    List<Product> wcList;

    RecyclerView mRecyclerView;

    /**
     * Whether or not the activity is in two-pane mode, i.e. running on a tablet device.
     */
    public boolean mTwoPane;

    public static MyFragment newInstance() {
        return new MyFragment();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main, container, false);
        mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null;

        mRecyclerView = view.findViewById(R.id.recyclerView_list);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
        mRecyclerView.addItemDecoration(new DividerItemDecoration(Objects.requireNonNull(getContext()), LinearLayout.VERTICAL));

        myList = new ArrayList<>();

        String[] items = getResources().getStringArray(R.array.product_names);
        String[] itemDescriptions = getResources().getStringArray(R.array.product_descriptions);
        for (int n = 0; n < items.length; n++){
            Product desserts = new Product();
            desserts.setProductName(items[n]);
            wdessertsc.setProductDescriptions(itemDescriptions[n]);
            myList.add(desserts);
        }

        MyListAdapter listAdapter = new MyListAdapter(getActivity(), myList);

        mRecyclerView.setAdapter(listAdapter);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null;

        super.onActivityCreated(savedInstanceState);
    }
}
    public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.MyViewHolder> {
        public boolean mTwoPane;

        private Context mCtx;

        private List<Product> myList;

        public MyListAdapter(Context mCtx, List<Product> myList) {
            this.mCtx = mCtx;
            this.myList = myList;
        }

        @NonNull
        @Override
        public MyListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(mCtx);
            View view = inflater.inflate(R.layout.listitem_dualline, parent,false);
            return new MyListAdapter.MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull final MyListAdapter.MyViewHolder holder, final int position) {
            Log.d(TAG, "onBindViewHolder: called.");

            final Product product = myList.get(holder.getAdapterPosition());

            holder.textviewTitle.setText(product.getProductName());
            holder.textviewSubtitle.setText(product.getPRoductDescription());


            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mTwoPane) {
                        Fragment newFragment;
                        if (product.getStationName().equals(v.getResources().getString(R.string.product_1))) {
                            newFragment = new FragmentProduct1();
                        } else {
                            newFragment = new FragmentProdcut2();
                        }
                        MyActivity activity = (MyActivity) v.getContext();
                        FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
                        transaction.replace(R.id.detail_container, newFragment);
                        transaction.commit();
                    } else {
                        Intent intent;
                        if (product.getStationName().equals(v.getResources().getString(R.string.product_1))) {
                            intent = new Intent(v.getContext(), Product1Activity.class);
                        } else {
                            intent = new Intent(v.getContext(), Product2Activity.class);
                        }
                        mCtx.startActivity(intent);
                    }
                }
            });
        }

        @Override
        public int getItemCount() {
            return myList.size();
        }

        class MyViewHolder extends RecyclerView.ViewHolder {
            RelativeLayout relativeLayout;
            TextView textviewTitle, textviewSubtitle;

            StationViewHolder(View itemView) {
                super(itemView);

                mTwoPane = itemView.findViewById(R.id.detail_container) != null;

                relativeLayout = itemView.findViewById(R.id.listitem_relativelayout);
                textviewTitle = itemView.findViewById(R.id.listitem_title);
                textviewSubtitle = itemView.findViewById(R.id.listitem_subtitle);
            }
    }
}
公共类MyFragment扩展了片段{
公共MyFragment(){}
列表列表;
回收视图mRecyclerView;
/**
*活动是否处于双窗格模式,即在平板电脑设备上运行。
*/
公共布尔值窗格;
公共静态MyFragment newInstance(){
返回新的MyFragment();
}
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
视图=充气机。充气(R.layout.activity\u main,容器,错误);
mTwoPane=Objects.requirennoull(getActivity()).findViewById(R.id.detail\u容器)!=null;
mRecyclerView=view.findviewbyd(R.id.recyclerView\u列表);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this.getActivity());
addItemDecoration(新的DividerItemDecoration(Objects.requireNonNull(getContext()),LinearLayout.VERTICAL));
myList=新的ArrayList();
String[]items=getResources().getStringArray(R.array.product_name);
String[]itemsdescriptions=getResources().getStringArray(R.array.product_descriptions);
对于(int n=0;n
适配器类

public class MyFragment extends Fragment {

    public MyFragment() {}

    List<Product> wcList;

    RecyclerView mRecyclerView;

    /**
     * Whether or not the activity is in two-pane mode, i.e. running on a tablet device.
     */
    public boolean mTwoPane;

    public static MyFragment newInstance() {
        return new MyFragment();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main, container, false);
        mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null;

        mRecyclerView = view.findViewById(R.id.recyclerView_list);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
        mRecyclerView.addItemDecoration(new DividerItemDecoration(Objects.requireNonNull(getContext()), LinearLayout.VERTICAL));

        myList = new ArrayList<>();

        String[] items = getResources().getStringArray(R.array.product_names);
        String[] itemDescriptions = getResources().getStringArray(R.array.product_descriptions);
        for (int n = 0; n < items.length; n++){
            Product desserts = new Product();
            desserts.setProductName(items[n]);
            wdessertsc.setProductDescriptions(itemDescriptions[n]);
            myList.add(desserts);
        }

        MyListAdapter listAdapter = new MyListAdapter(getActivity(), myList);

        mRecyclerView.setAdapter(listAdapter);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        mTwoPane = Objects.requireNonNull(getActivity()).findViewById(R.id.detail_container) != null;

        super.onActivityCreated(savedInstanceState);
    }
}
    public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.MyViewHolder> {
        public boolean mTwoPane;

        private Context mCtx;

        private List<Product> myList;

        public MyListAdapter(Context mCtx, List<Product> myList) {
            this.mCtx = mCtx;
            this.myList = myList;
        }

        @NonNull
        @Override
        public MyListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(mCtx);
            View view = inflater.inflate(R.layout.listitem_dualline, parent,false);
            return new MyListAdapter.MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull final MyListAdapter.MyViewHolder holder, final int position) {
            Log.d(TAG, "onBindViewHolder: called.");

            final Product product = myList.get(holder.getAdapterPosition());

            holder.textviewTitle.setText(product.getProductName());
            holder.textviewSubtitle.setText(product.getPRoductDescription());


            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mTwoPane) {
                        Fragment newFragment;
                        if (product.getStationName().equals(v.getResources().getString(R.string.product_1))) {
                            newFragment = new FragmentProduct1();
                        } else {
                            newFragment = new FragmentProdcut2();
                        }
                        MyActivity activity = (MyActivity) v.getContext();
                        FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
                        transaction.replace(R.id.detail_container, newFragment);
                        transaction.commit();
                    } else {
                        Intent intent;
                        if (product.getStationName().equals(v.getResources().getString(R.string.product_1))) {
                            intent = new Intent(v.getContext(), Product1Activity.class);
                        } else {
                            intent = new Intent(v.getContext(), Product2Activity.class);
                        }
                        mCtx.startActivity(intent);
                    }
                }
            });
        }

        @Override
        public int getItemCount() {
            return myList.size();
        }

        class MyViewHolder extends RecyclerView.ViewHolder {
            RelativeLayout relativeLayout;
            TextView textviewTitle, textviewSubtitle;

            StationViewHolder(View itemView) {
                super(itemView);

                mTwoPane = itemView.findViewById(R.id.detail_container) != null;

                relativeLayout = itemView.findViewById(R.id.listitem_relativelayout);
                textviewTitle = itemView.findViewById(R.id.listitem_title);
                textviewSubtitle = itemView.findViewById(R.id.listitem_subtitle);
            }
    }
}
公共类MyListAdapter扩展了RecyclerView.Adapter{
公共布尔值窗格;
私有上下文mCtx;
私人名单;
公共MyListAdapter(上下文mCtx,列表myList){
this.mCtx=mCtx;
this.myList=myList;
}
@非空
@凌驾
public MyListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
LayoutFlater充气机=LayoutFlater.from(mCtx);
视图=充气机。充气(R.layout.listitem_双线,父项,false);
返回新的MyListAdapter.MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull final MyListAdapter.MyViewHolder,final int position){
Log.d(标记“onBindViewHolder:called”);
最终产品Product=myList.get(holder.getAdapterPosition());
holder.textviewTitle.setText(product.getProductName());
holder.textviewSubtitle.setText(product.getPRoductDescription());
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(mTwoPane){
新片段;
if(product.getStationName().equals(v.getResources().getString(R.string.product_1))){
newFragment=newfragmentproduct1();
}否则{
newFragment=newfragmentprodcut2();
}
MyActivity=(MyActivity)v.getContext();
FragmentTransaction=activity.getSupportFragmentManager().beginTransaction();
事务.替换(R.id.detail\u容器,newFragment);
commit();
}否则{
意图;
if(product.getStationName().equals(v.getResources().getString(R.string.product_1))){
intent=新的intent(v.getContext(),Product1Activity.class);
}否则{
intent=newintent(v.getContext(),Product2Activity.class);
}
mCtx.启动触觉(意图);
}
}
});
}
@凌驾
public int getItemCount(){
返回myList.size();
}
类MyViewHolder扩展了RecyclerView.ViewHolder{
相对的相对的;
TextView textviewTitle,textviewSubtitle;
StationViewHolder(查看项目视图){
超级(项目视图);
mTwoPane=itemView.findviewbyd(R.id.detail\u容器)!=null;
relativeLayout=itemView.findViewById(R.id.listitem\u relativeLayout);
textviewTitle=itemView.findViewById(R.id.listitem\u title);
textviewSubtitle=itemView.findViewById(R.id.listitem\u subtitle);
}
}
}

此行
mTwoPane=itemView.findViewById(R.id.detail\u container)!=无效将始终为false

为什么?

因为您的
detail\u容器
不是视图持有者的项目容器的一部分,所以
itemView
将始终