gpt4 book ai didi

android - 在回收站 View 中的两个布局之间切换

转载 作者:行者123 更新时间:2023-11-30 01:20:10 25 4
gpt4 key购买 nike

enter image description here [列表布局][1]我是使用 recyclerview 的新手,我看到了一些问题,但没有人真正回答我的问题。我有 2 种布局,一种是带有文本的自定义 ListView 和个人资料头像,文本和图像嵌套在与屏幕宽度匹配的 cardview 中。另一个是相同的内容(具有相同的 id),但这里的图像和文本被设置为包装内容,以便它们以网格格式出现(如其 mainActivity 的 flash share/xender 实现)。我真正想做的是在运行时使用以下方法在这两种布局之间切换:

RecyclerView.setLayoutManager(new LinearLayout(this);

对于第一个布局和:

RecyclerView.setLayoutManager(new GridLayoutManager(ClassList.this, 3));

对于第二个布局,其宽度设置为包装内容,以便在呈现时看起来更好。这是列表布局 1:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="100dp"
card_view:cardElevation="4dp"
card_view:cardUseCompatPadding="true"
card_view:cardCornerRadius="5dp"
android:padding="5dp"
android:layout_margin="5dp"
android:foreground="?attr/selectableItemBackground">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="2dp"
android:layout_margin="2dp"
android:orientation="horizontal">

<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/student_avatar"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_gravity="center"
android:scaleType="centerCrop"
android:src="@drawable/nothing"
app:border_color="#FF000000" />

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

<TextView
android:id="@+id/student_name_edit_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chinedum Ofomata Agu"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/student_reg_number_edit_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reg: 2014544402"
android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

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

第二个(网格)布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="160dp"
android:padding="5dp"
android:layout_margin="5dp"
android:gravity="center"
android:background="?android:attr/selectableItemBackground"
android:scrollbarStyle="insideInset"
android:orientation="vertical">

<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/student_avatar"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_gravity="center"
android:scaleType="centerCrop"
android:src="@drawable/nothing"
app:border_color="#FF000000" />

<TextView
android:id="@+id/student_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Chinedum Agu"
android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
android:id="@+id/student_reg_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center"
android:text="Reg: 2014544402"
android:textAppearance="?android:attr/textAppearanceSmall" />

</LinearLayout>

我在我的 mainActivity 中实现了 onClickListener,所以我在我的 Main Activity 中控制 Recycler View 的点击响应,而不是在我的适配器类中。我发现的大多数问题和答案都围绕着如何像 StaggeredGridView 一样同时实现多个 View ,但我想要的是一种在运行时扩展两个布局并切换它们的方法。

这是我的适配器类(还没有任何数据集):

public class ClassListAdapter extends RecyclerView.Adapter<ClassListAdapter.Holder> {

private static final String TAG = ClassListAdapter1.class.getSimpleName();
private static clickListener mClickListener;
View row;

public ClassListAdapter(clickListener listener) {
mClickListener = listener;
}


@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
row = LayoutInflater.from(parent.getContext()).inflate(R.layout.class_list_listview_cardview, parent, false);
return new Holder(row);
}

@Override
public void onBindViewHolder(Holder holder, int position) {
}

@Override
public int getItemCount() {
return 10;
}

public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView student_avatar;
private TextView student_name, reg_number;
View mview;

public Holder(View itemView) {
super(itemView);
mview = itemView;

student_avatar = (ImageView) itemView.findViewById(R.id.student_avatar);
student_name = (TextView) itemView.findViewById(R.id.student_name);
reg_number = (TextView) itemView.findViewById(R.id.student_reg_number);
itemView.setOnClickListener(this);

}

@Override
public void onClick(View v) {
mClickListener.onItemClick(getLayoutPosition());
}
}

public interface clickListener {
void onItemClick(int position);
// void onItemLongClick(int position);
}
}

这是我的 mainActivity 代码:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.class_list_recyclerview);
toolbar = (Toolbar) findViewById(R.id.default_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
classListAdapter = new ClassListAdapter(ClassList.this);
configViews();
}

@Override
public void onItemClick(int position) {
Toast.makeText(ClassList.this, "You clicked item" + " " + position, Toast.LENGTH_SHORT).show();
intent = new Intent(ClassList.this, Profile.class);
startActivity(intent);
overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
}

private void configViews() {

mRecyclerView.setLayoutManager(new LinearLayoutManager(ClassList.this, LinearLayoutManager.VERTICAL, false));
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
mRecyclerView.setAdapter(classListAdapter);

}

我不想同时显示两种布局,而是根据用户的选择显示某个布局。请任何建议将不胜感激。谢谢。

最佳答案

最初isList值为真

mLinearLayoutManager = new LinearLayoutManager(getActivity());
mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mGridLayourManager = new GridLayoutManager(getActivity(),3);
setLayoutManager();


private void setLayoutManager() {
if (isList) {
mRVList.setLayoutManager(mLinearLayoutManager);
}else{
mRVList.setLayoutManager(mGridLayourManager);
}
}

//按下列表切换按钮

isList=!isList;
setLayoutManager();
mAdapter.setList(isList);
mRVList.setAdapter(mAdapter);

适配器类更改

@Override
public AdapterRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(isList ? R.layout.row_layout_list : R.layout.row_layout_grid, null);
AdapterRowHolder holder = new AdapterRowHolder(v);
return holder;
}

关于android - 在回收站 View 中的两个布局之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37243974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com