Java 使用GridLayoutManager和RecyclerView更改自动调整屏幕的列数

Java 使用GridLayoutManager和RecyclerView更改自动调整屏幕的列数,java,android,android-recyclerview,grid-layout,Java,Android,Android Recyclerview,Grid Layout,我正在片段中使用Recyclerview。。。 在我的片段中,我以以下方式设置GridLayout: myTV.setLayoutManager(new GridLayoutManager(getActivity(),3)); 代码显示,对于横向和纵向模式,只有3列 但我想为用户旋转手机/平板电脑时的屏幕设置最大列数。 这是我的PeopleFragment.java public class PeopleFragment extends Fragment { View v;

我正在片段中使用Recyclerview。。。 在我的片段中,我以以下方式设置GridLayout:

myTV.setLayoutManager(new GridLayoutManager(getActivity(),3));
代码显示,对于横向和纵向模式,只有3列

但我想为用户旋转手机/平板电脑时的屏幕设置最大列数。

这是我的PeopleFragment.java

public class PeopleFragment extends Fragment {
    View v;
        List<People> listPeople;
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            v= inflater.inflate(R.layout.fragment_people,container,false);

            listPeople = new ArrayList<>();

            listPeople.add(new People("1-name",R.drawable.image1));
            listPeople.add(new People("2-name",R.drawable.image2));
            listPeople.add(new People("3-name",R.drawable.image3));
            listPeople.add(new People("4-name",R.drawable.image4));
            listPeople.add(new People("5-name",R.drawable.image5));
            listPeople.add(new People("6-name",R.drawable.image6));
            listPeople.add(new People("7-name",R.drawable.image7));

            RecyclerView myTV= (RecyclerView) v.findViewById(R.id.recyclerview_id);
            RecyclerViewAdapterPDF myAdapter = new RecyclerViewAdapterPDF(getActivity(),listPeople);
            myTV.setLayoutManager(new GridLayoutManager(getActivity(),3));
            myTV.setAdapter(myAdapter);

            return v;
      }
    }
公共类PeopleFragment扩展了片段{
观点五;
列出名单;
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
v=充气机。充气(右布局。碎片\人,容器,假);
listPeople=newArrayList();
添加(新人物(“1-name”,R.drawable.image1));
添加(新人物(“2-name”,R.drawable.image2));
添加(新人物(“3-name”,R.drawable.image3));
添加(新人物(“4-name”,R.drawable.image4));
添加(新人物(“5-name”,R.drawable.image5));
添加(新人物(“6-name”,R.drawable.image6));
添加(新人物(“7-name”,R.drawable.image7));
RecyclerView myTV=(RecyclerView)v.findViewById(R.id.RecyclerView\u id);
RecycleServiceAdapterPDF myAdapter=新的RecycleServiceAdapterPDF(getActivity(),listPeople);
setLayoutManager(新的GridLayoutManager(getActivity(),3));
myTV.setAdapter(myAdapter);
返回v;
}
}
fragment_people.java

 <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview_id"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

我使用了android:numColumns=“auto\u-fit”
。 但我不工作

你能告诉我如何解决这个问题吗?这里有不同的问题…

在这里,您可以为return
no of columns
创建一个类,或者直接使用方法

将此方法添加到片段类中

public int calculateNoOfColumns(Context context) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
    int noOfColumns = (int) (dpWidth / 180);
    return noOfColumns;
}
&将适配器代码更改为

myTV.setLayoutManager(new GridLayoutManager(getActivity(),calculateNoOfColumns(getActivity())));

在这里,您可以为return
no of columns
创建一个类,或者直接使用方法

将此方法添加到片段类中

public int calculateNoOfColumns(Context context) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
    int noOfColumns = (int) (dpWidth / 180);
    return noOfColumns;
}
&将适配器代码更改为

myTV.setLayoutManager(new GridLayoutManager(getActivity(),calculateNoOfColumns(getActivity())));

可能是@MohamedMohaidenah的副本谢谢你的链接。但我无法清除答案,放在哪里?检查我的答案将帮助你。。!可能是@MohamedMohaidenah的副本谢谢你的链接。但我无法清除答案,放在哪里?检查我的答案将帮助你。。!欢迎乐于帮助快乐编码:)欢迎乐于帮助快乐编码:)