简体   繁体   English

在android上单击按钮在recyclerview的2个视图之间切换

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

i've a recyclerview in which i have 2 buttons.i want to switch between 2 different views on clicking the button.in my recyclerview adapter class, i've populated the view as 我有一个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;

but i dont know how to use 2 views on button click.i've attached the views that i want to switch on button click view 1 但我不知道如何在按钮click.2上使用2个视图。我附加了要在按钮click上打开的视图1

My full code is shown below: 我的完整代码如下所示:

Offline_Adapter.java: 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 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 with button 带按钮的recyclerview

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

use position in onBindViewHolder. 在onBindViewHolder中使用位置。

You are doing wrong here 你在这里做错了

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

And why are you doing this stuff in onCreateViewHolder() of RecyclerView Adapter class. 以及为什么要在RecyclerView Adapter类的onCreateViewHolder()中执行此操作。 From your code it seems these buttons are in Activity or Fragment layouts. 从您的代码看来,这些按钮似乎处于“活动”或“片段”布局中。 Right? 对? If yes, please find them in Activity fragment and set Click Listener to them. 如果是,请在“活动”片段中找到它们,然后将Click Listener设置为它们。

Next: make a public method in Adapter class and a state variable in Adapter class too. 下一步:在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;

and public method in adapter as 和适配器中的公共方法为

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

Next: Now time comes to handle view in onCreateViewHolder method of adapter. 下一步:现在是时候在适配器的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;
   }

Now in your activity or fragment class, handle button click as 现在在您的活动或片段类中,将按钮单击为

 // 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