Android 使用“警报”对话框更改Reyclerview布局
我有一个应用程序在列表布局中已经有一个RecyclerView。此RecylcerView还具有从alertDialog调用的各种筛选器。我希望能够从这个alertDialog更改RecyclerView的布局 我已经更新了Android 使用“警报”对话框更改Reyclerview布局,android,android-layout,android-recyclerview,android-adapter,android-gridlayout,Android,Android Layout,Android Recyclerview,Android Adapter,Android Gridlayout,我有一个应用程序在列表布局中已经有一个RecyclerView。此RecylcerView还具有从alertDialog调用的各种筛选器。我希望能够从这个alertDialog更改RecyclerView的布局 我已经更新了对话框_layout.xml以包含按钮,并更新了main活动创建了两个布尔变量liststate和gridstate,这两个变量由新按钮触发的两个onclicklistener更新。(我知道它们不需要是布尔值,但我将它们用于其他按钮,因此处理装饰,因此我认为我也会在这里使用它
对话框_layout.xml
以包含按钮,并更新了main活动
创建了两个布尔变量liststate
和gridstate
,这两个变量由新按钮触发的两个onclicklistener更新。(我知道它们不需要是布尔值,但我将它们用于其他按钮,因此处理装饰,因此我认为我也会在这里使用它们)
我已经创建了一个layout\u listitem\u 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>
我需要如何更改RecycleServiceAdapter
,我正在寻找最简单的方法,我知道我必须更新支架等,但我也希望过滤器在使用后仍能正常工作,迄今为止我所做的每一种方法都会破坏它们
我知道我的代码可能不美观,也不传统,但目前它仍在工作,所以我希望保持这种状态是可能的
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);
}
}
}
package com.british.sheep.brides;
导入android.content.Context;
导入android.content.Intent;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Filter;
导入android.widget.Filterable;
导入android.widget.ImageView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
导入androidx.recyclerview.widget.recyclerview;
导入com.bumptech.glide.glide;
导入java.util.ArrayList;
导入java.util.List;
公共类RecycleServiceAdapter扩展了RecyclerView。适配器实现可筛选{
私有静态最终字符串TAG=“RecycleServiceAdapter”;
ArrayList filteredList;
阵列列表图像阵列列表;
ArrayList imagesArrayListFull;
私有上下文;
公共RecycleServiceAdapter(上下文上下文,ArrayList imagesArrayList){
mContext=上下文;
this.imagesArrayList=imagesArrayList;
imagesArrayListFull=新阵列列表(imagesArrayList);
}
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
filteredList=新建ArrayList();
if(constraint==null | | constraint.length()==0){
filteredList.addAll(imagesArrayListFull);
}否则{
String filterPattern=constraint.toString().toLowerCase().trim();
对于(图像项:imagesArrayListFull){
if(item.getmImageNames().toLowerCase().contains(filterPattern)){
filteredList.add(项目);
}
}
}
FilterResults results=新的FilterResults();
results.values=filteredList;
返回结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
imagesArrayList.clear();
imagesArrayList.addAll((List)results.values);
notifyDataSetChanged();
}
};
@凌驾
公共过滤器getFilter(){
回流过滤器;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.layout\u listitem,parent,false);
ViewHolder=新的ViewHolder(视图);
报税表持有人;
}
@凌驾
公共无效onBindViewHolder(最终视图持有人,最终整型位置){
String icon=imagesArrayList.get(position.getmImages();
int resid=this.mContext.getResources().getIdentifier(图标“可绘制”,mContext.getApplicationContext().getPackageName());
使用(mContext)滑动
.asBitmap()
.负载(剩余)
.插入(支架图像);
holder.imageName.setText(imagesArrayList.get(position.getmImageNames());
holder.parentLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(filteredList!=null){
int pos=holder.getAdapterPosition();
Images image=filteredList.get(pos);
对于(int i=0;ipackage 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);
}
}
}