问题描述
我有一个应用程序,该应用程序已经在列表布局中具有RecyclerView。该RecylcerView还具有从AlertDialog调用的各种过滤器。我也希望能够从此alertDialog更改RecyclerView的布局。
我更新了dialog_layout.xml
以包括按钮,并更新了MainActivity
,创建了两个布尔变量liststate
和gridstate
,这些变量由触发的两个onclicklistener更新通过新按钮。 (我知道它们不需要是布尔值,但我将它们用于其他按钮,因此可以处理装饰,所以我想我也将在这里使用它们)
我创建了一个layout_listitem_grid.xml
,类似于原始图片,但为正方形
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="150dp"
android:layout_height="150dp"
app:cardElevation="10dp"
app:cardUseCompatPadding="true">
<RelativeLayout
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin_card_left_right"
android:layout_marginRight="@dimen/margin_card_left_right"
android:layout_marginBottom="@dimen/margin_card"
android:background="@drawable/ripple"
android:clickable="true"
android:paddingLeft="@dimen/activity_margin_left"
android:paddingTop="@dimen/row_padding"
android:paddingRight="@dimen/activity_margin"
android:paddingBottom="@dimen/row_padding">
<ImageView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="150dp"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/image_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/activity_margin"
android:layout_toRightOf="@+id/image"
android:fontFamily="@font/baloo"
android:text="text"
android:textSize="@dimen/heading" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
我已将initRecyclerView
中的MainActivity
更新为包括一个if语句,以检查按钮的状态。
private void initRecyclerView() {
Log.d(TAG,"initRecyclerView: init recyclerview.");
RecyclerView recyclerView = findViewById(R.id.recycler_view);
adapter = new RecyclerViewAdapter(this,imagesArrayList);
if(liststate == true){
recyclerView.setLayoutManager(new linearlayoutmanager(this));
}
else{
recyclerView.setLayoutManager(new GridLayoutManager(this,3)); }
recyclerView.setAdapter(adapter);
}
我将如何更改RecyclerViewAdapter
,我正在寻找最简单的方法,我知道我必须更新Holder等,但我也希望过滤器在完成所有操作后仍然可以工作到目前为止已经破坏了他们。
我知道我的代码可能不是漂亮的代码,或者是常规代码,但是目前可以正常工作,所以我希望保持这种状态
package com.british.sheep.breeds;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements Filterable {
private static final String TAG = "RecyclerViewAdapter";
ArrayList<Images> filteredList;
ArrayList<Images> imagesArrayList;
ArrayList<Images> imagesArrayListFull;
private Context mContext;
public RecyclerViewAdapter(Context context,ArrayList<Images> imagesArrayList) {
mContext = context;
this.imagesArrayList = imagesArrayList;
imagesArrayListFull = new ArrayList<>(imagesArrayList);
}
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(imagesArrayListFull);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Images item : imagesArrayListFull) {
if (item.getmImageNames().toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
imagesArrayList.clear();
imagesArrayList.addAll((List) results.values);
notifyDataSetChanged();
}
};
@Override
public Filter getFilter() {
return filter;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final ViewHolder holder,final int position) {
String icon = imagesArrayList.get(position).getmImages();
int resid = this.mContext.getResources().getIdentifier(icon,"drawable",mContext.getApplicationContext().getPackageName());
Glide.with(mContext)
.asBitmap()
.load(resid)
.into(holder.image);
holder.imageName.setText(imagesArrayList.get(position).getmImageNames());
holder.parentLayout.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (filteredList != null) {
int pos = holder.getAdapterPosition();
Images image = filteredList.get(pos);
for (int i = 0; i < imagesArrayListFull.size(); i++) {
if (image.getmImageNames().equals(imagesArrayListFull.get(i).getmImageNames())) {
pos = i;
break;
}
}
Intent intent = new Intent(mContext,galleryActivity.class);
Images images = new Images(imagesArrayListFull.get(pos).getmImageNames(),imagesArrayListFull.get(pos).getmImages(),imagesArrayListFull.get(pos).getmImageTypes(),imagesArrayListFull.get(pos).getmImageEstablisheds(),imagesArrayListFull.get(pos).getmImageHandles(),imagesArrayListFull.get(pos).getmImageColours(),imagesArrayListFull.get(pos).getmImageFleeces(),imagesArrayListFull.get(pos).getmImageStaples(),imagesArrayListFull.get(pos).getmImageMicrons(),imagesArrayListFull.get(pos).getmImagegallerys());
intent.putExtra("Images",images);
mContext.startActivity(intent);
} else {
Intent intent = new Intent(mContext,galleryActivity.class);
Images images = new Images(imagesArrayListFull.get(position).getmImageNames(),imagesArrayListFull.get(position).getmImages(),imagesArrayListFull.get(position).getmImageTypes(),imagesArrayListFull.get(position).getmImageEstablisheds(),imagesArrayListFull.get(position).getmImageHandles(),imagesArrayListFull.get(position).getmImageColours(),imagesArrayListFull.get(position).getmImageFleeces(),imagesArrayListFull.get(position).getmImageStaples(),imagesArrayListFull.get(position).getmImageMicrons(),imagesArrayListFull.get(position).getmImagegallerys());
intent.putExtra("Images",images);
mContext.startActivity(intent);
}
}
});
}
@Override
public int getItemCount() {
return imagesArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView image;
TextView imageName;
TextView imageType;
TextView imageEstablished;
TextView imageHandle;
TextView imageColour;
TextView imageFleece;
TextView imageStaple;
TextView imageMicron;
ImageView imagegallery;
RelativeLayout parentLayout;
public ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
imageName = itemView.findViewById(R.id.image_name);
parentLayout = itemView.findViewById(R.id.parent_layout);
imageType = itemView.findViewById(R.id.image_type);
imageEstablished = itemView.findViewById(R.id.image_established);
imageHandle = itemView.findViewById(R.id.image_handle);
imageColour = itemView.findViewById(R.id.image_colour);
imageFleece = itemView.findViewById(R.id.image_fleece);
imageStaple = itemView.findViewById(R.id.image_staple);
imageMicron = itemView.findViewById(R.id.image_micron);
imagegallery = itemView.findViewById(R.id.image_gallery);
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)