簡體   English   中英

在android上單擊按鈕在recyclerview的2個視圖之間切換

[英]Switch between 2 views of a recyclerview on a button click in android

我有一個recyclerview,其中有2個按鈕。我想在單擊按鈕時在2個不同的視圖之間切換。在我的recyclerview適配器類中,我已將視圖填充為

 public Offline_ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
     view=LayoutInflater.from(parent.getContext()).inflate(R.layout.offline_data_card, null);
  Offline_ViewHolder ovh = new Offline_ViewHolder(view);
 return ovh;

但我不知道如何在按鈕click.2上使用2個視圖。我附加了要在按鈕click上打開的視圖1

我的完整代碼如下所示:

Offline_Adapter.java:


public class Offline_Adapter extends RecyclerView.Adapter<Offline_ViewHolder> {
     Context context;
    RequestQueue mRequestQueue;
    ImageLoader mImageLoader;
    DBHelper myDB;
    ArrayList<Offers> datas;
    SparseBooleanArray selectedItems;
    ActionMode mActionMode;
    Button b1,b2;
    public Offline_Adapter(Context context, ArrayList<Offers> datas) {

        this.context = context;
        this.datas = datas;
        selectedItems = new SparseBooleanArray();
        mRequestQueue = Volley.newRequestQueue(context);
        mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {

            private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(10);

            public void putBitmap(String url, Bitmap bitmap) {
                mCache.put(url, bitmap);
            }

            public Bitmap getBitmap(String url) {
                return mCache.get(url);
            }
        });

    }


    @Override
    public Offline_ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        b1=(Button)parent.findViewById(R.id.b1);
        b2=(Button)parent.findViewById(R.id.b2);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view = LayoutInflater.from(v.getContext()).inflate(R.layout.offline_data_card, null);
               view.setVisibility(View.VISIBLE);
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view = LayoutInflater.from(v.getContext()).inflate(R.layout.offline_data_card_view2, null);
                view.setVisibility(View.VISIBLE);
            }
        });
        Offline_ViewHolder ovh = new Offline_ViewHolder(view);
        return ovh;
    }

    @Override
    public void onBindViewHolder(Offline_ViewHolder holder, final int position) {
        String card_id = datas.get(position).getLe_id().toString();
        String img_url = URL.IMAGE;
        String Thumb_image = img_url + card_id + ".jpg";
        if (Thumb_image == null || Thumb_image == "") {
            holder.image.setImageResource(R.drawable.vg_placeholder);
        } else {
            holder.image.setImageUrl(Thumb_image, mImageLoader);
        }

        String font_path = "fonts/Roboto-Bold.ttf";
        Typeface font = Typeface.createFromAsset(context.getAssets(), font_path);
        holder.title.setTypeface(font);
        holder.title.setText(datas.get(position).getTitle().toString());

        String count = datas.get(position).getView_count();
        count = Integer.valueOf(count).toString();
        holder.v_count.setText(count);
        holder.c_count.setText(datas.get(position).getComment_count());
        holder.f_count.setText(datas.get(position).getFav_count());


        holder.image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String downloadpath = URL.DOWNLOAD;
                String url_id = datas.get(position).getLe_id().toString();
                String download_link = downloadpath + url_id + ".zip";

                String file_title = datas.get(position).getTitle().toString();
                String publishversion = datas.get(position).getPublish_ver().toString();
                String fav = datas.get(position).getFav_count().toString();
                String com = datas.get(position).getComment_count().toString();
                String view = datas.get(position).getView_count().toString();

                Intent intent = new Intent(context, Offline_view.class);
                intent.putExtra("url_id", url_id);
                intent.putExtra("d_url", download_link);
                intent.putExtra("file_title", file_title);
                intent.putExtra("publishV", publishversion);
                intent.putExtra("fav", fav);
                intent.putExtra("com", com);
                intent.putExtra("view", view);


                context.startActivity(intent);
            }
        });

    }

    @Override
    public int getItemCount() {
        return datas.size();
    }

Offline_ViewHolder.class


public class Offline_ViewHolder extends RecyclerView.ViewHolder {
    NetworkImageView image;
    TextView title;
    TextView tv1,v_count,c_count,f_count;
    Offline_Adapter adapter;
    public Offline_ViewHolder(View itemView) {
        super(itemView);
        image=(NetworkImageView)itemView.findViewById(R.id.img_thumbnail);
        title=(TextView)itemView.findViewById(R.id.name);
        v_count= (TextView) itemView.findViewById(R.id.viewcount_txt);
        c_count= (TextView) itemView.findViewById(R.id.comment_text);
        f_count= (TextView) itemView.findViewById(R.id.fav_text);

   }
}

帶按鈕的recyclerview

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
       if(position==0){
         youbutton.setOnclickListener();
       }else{
       }
    }

在onBindViewHolder中使用位置。

你在這里做錯了

@Override
    public Offline_ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        b1=(Button)findViewById(R.id.b1);
        b2=(Button)findViewById(R.id.b2);

以及為什么要在RecyclerView Adapter類的onCreateViewHolder()中執行此操作。 從您的代碼看來,這些按鈕似乎處於“活動”或“片段”布局中。 對? 如果是,請在“活動”片段中找到它們,然后將Click Listener設置為它們。

下一步:在Adapter類中創建一個公共方法,在Adapter類中也創建一個狀態變量。

    public class Offline_Adapter extends RecyclerView.Adapter<Offline_ViewHolder> {
         Context context;
private boolean mIsOfflineMode = false;

        RequestQueue mRequestQueue;
        ImageLoader mImageLoader;
        DBHelper myDB;
        ArrayList<Offers> datas;

和適配器中的公共方法為

   public void setOfflineSate(boolean state){
     mIsOfflineMode  = state;
 this.notifyDataSetChanged();
    }

下一步:現在是時候在適配器的onCreateViewHolder方法中處理視圖了。

   @Override
    public Offline_ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view ;
        if(isOffileMode){
        view = LayoutInflater.from(v.getContext()).inflate(R.layout.offline_data_card, null);     
    }else{
     view=LayoutInflater.from(v.getContext()).inflate(R.layout.offline_data_card_view2,null);
    }

     Offline_ViewHolder ovh=new Offline_ViewHolder(view);
        return ovh;
   }

現在在您的活動或片段類中,將按鈕單擊為

 // I am supposing you have Offline_Adapter Object as mOffLineAdapter and is  initialized 
 b1=(Button)parent.findViewById(R.id.b1);
        b2=(Button)parent.findViewById(R.id.b2);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             mOffLineAdapter.setOfflineSate(false);
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               mOffLineAdapter.setOfflineSate(true);
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM