使用警报对话框更改Reyclerview布局

问题描述

我有一个应用程序,该应用程序已经在列表布局中具有RecyclerView。该RecylcerView还具有从AlertDialog调用的各种过滤器。我也希望能够从此alertDialog更改RecyclerView的布局。

我更新了dialog_layout.xml包括按钮,并更新了MainActivity,创建了两个布尔变量liststategridstate,这些变量由触发的两个onclicklistener更新通过新按钮。 (我知道它们不需要是布尔值,但我将它们用于其他按钮,因此可以处理装饰,所以我想我也将在这里使用它们)

enter image description here

我创建了一个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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...