单击回收者视图时如何获取当前值

时间:2018-09-05 07:06:31

标签: android

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {


private String[] mDatasetname;

private Integer[] mexp;
Context context;
public ToggleButton select;
Integer selectedcountint=0;
  private Bitmap[] mpro;

private String[] mloc;
private String[] mobj;

private String[] mselected;
 public ArrayList<String> nselected = new ArrayList<>();



public static class MyViewHolder extends RecyclerView.ViewHolder{

    public CardView mCardView;
    public TextView mTextView;
    public TextView texp;
    public Button pdf;
    public ToggleButton select;
    public ImageView pro;
    public TextView loc;




    public MyViewHolder(View v){

        super(v);


        mCardView = (CardView) v.findViewById(R.id.card_view);
        mTextView = (TextView) v.findViewById(R.id.tv_text);
       texp = (TextView) v.findViewById(R.id.setexp);
        pdf = (Button) v.findViewById(R.id.moreinfo);
        select = (ToggleButton) v.findViewById(R.id.select);
        pro = (ImageView) v.findViewById(R.id.setpropic);
        loc = (TextView) v.findViewById(R.id.setlocation);



    }


}

public MyAdapter(String[] myDataset,Integer[] exp,Bitmap[] pro,String[] loc,String[] obj){


    mDatasetname = myDataset;

    mexp=exp;
    mpro=pro;
    mloc=loc;

    mobj=obj;



}



@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

    context=parent.getContext();
    View vs = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
    MyViewHolder vh = new MyViewHolder(vs);
    return vh;
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position){




    holder.mTextView.setText(mDatasetname[position]);
    holder.texp.setText(String.valueOf(mexp[position])+" yrs");
    holder.pro.setImageBitmap(mpro[position]);
    holder.loc.setText(mloc[position]);
    holder.select.setText("rejected");

    holder.pdf.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent();
            intent =  new Intent(context, PdfViewer.class);
            intent.putExtra("obj",mobj[position]);
            context.startActivity(intent);


        }
    });



    holder.select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked==true) {
                holder.select.setChecked(true);
                holder.select.setText("selected");
              nselected.remove(mobj[position]+",rejected");
               nselected.add(mobj[position]+",selected");
                Log.d("dei", String.valueOf(nselected));
                selectedcountint=selectedcountint+1;

                Intent intent = new Intent("custom-message");
                //            intent.putExtra("quantity",Integer.parseInt(quantity.getText().toString()));
                Bundle args = new Bundle();
                args.putSerializable("ARRAYLIST",(Serializable)nselected);
                intent.putExtra("BUNDLE",args);
                intent.putExtra("totalval",selectedcountint);

                LocalBroadcastManager.getInstance(context).sendBroadcast(intent);


            } else {
                holder.select.setChecked(false);
                holder.select.setText("rejected");
                nselected.remove(mobj[position]+",selected");
                nselected.add(mobj[position]+",rejected");
                Log.d("dei", String.valueOf(nselected));
                selectedcountint=selectedcountint-1;


                Intent intent = new Intent("custom-message");
                //            intent.putExtra("quantity",Integer.parseInt(quantity.getText().toString()));
                Bundle args = new Bundle();
                args.putSerializable("ARRAYLIST",(Serializable)nselected);
                intent.putExtra("BUNDLE",args);
                intent.putExtra("totalval",selectedcountint);

                LocalBroadcastManager.getInstance(context).sendBroadcast(intent);






            }
        }
    });







}


@Override
public int getItemCount() { return mDatasetname.length; }

}

我的应用程序中有一个回收站视图。我有问题。有一个项目,因此当我单击项目a时,将执行单击b中的功能。当您为我清理下面的代码时,这非常好,因为我是编程新手,所以我将无法解决问题。

4 个答案:

答案 0 :(得分:1)

if(getAdapterPosition() != RecyclerView.NO_POSITION) {
  ...
  mobj[getAdapterPosition()]
  ...
}

答案 1 :(得分:0)

最好在ViewHolder中设置数据和侦听器。您应该在ViewHolder类中创建一个方法,并将列表中的项目作为参数传递给该方法。在这种方法中,您将复制所有用于设置文本和侦听器的代码。然后在onBindViewHolder中调用此方法。

首先创建一个将成为适配器项的类(您应该更改字段名称,因为我不知道它们应该代表什么,这只是一个示例):

class AdapterItem {

   private String firstString;
   private Integer integerValue;
   private Bitmap bitmap;
   private String secondString;
   private String thirdString;

   // create also getters, setters for fields
}

您的适配器构造函数将如下所示:

public MyAdapter(ArrayList<AdapterItem> data){
   this.data = data;
}

还有onBindViewHolder方法:

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position){
    holder.bind(data[position]);
}

在ViewHolder类中:

void bind(AdapterItem item) {
    mTextView.setText(item.getFirstString());

    pdf.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(context, PdfViewer.class);
        intent.putExtra("obj", item.getThirdString());
        v.getContext().startActivity(intent);
        }
   });

}

答案 2 :(得分:0)

@andrei正确指出的从obj []数组中获取正确字符串的代码应如下所示:

public MyAdapter(Context context, String[] myDataset,Integer[] exp,Bitmap[] pro,String[] loc,String[] obj){
    mContext = context; // make mContext as a variable like others
    mDatasetname = myDataset;
    mexp=exp;
    mpro=pro;
    mloc=loc;
    mobj=obj;
}

    holder.pdf.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent();
            intent =  new Intent(context, PdfViewer.class);
            intent.putExtra("obj",mobj[holder.getAdapterPosition()]);
            mContext.startActivity(intent);
        }
    });

并类似地将所有出现的position替换为holder.getAdapterPosition(),因为holder.getAdapterPosition()会始终为您提供代码中的回收站视图项目的更新位置,就好像您在不使用任何代码的情况下更新或删除项目一样使用notifyDataSetChanged()方法将不会再次调用onBindViewHolder,因此位置将变得不一致。有关详细信息,请参阅此answer

答案 3 :(得分:0)

公共类MyAdapter扩展了RecyclerView.Adapter {

private String[] mDatasetname;

private Integer[] mexp;
 private Context context;
public ToggleButton select;
Integer selectedcountint=0;
  private Bitmap[] mpro;

private String[] mloc;
private String[] mobj;
public Button pdf;Context m;private String[] mselected;
 public ArrayList<String> nselected = new ArrayList<>();



public static class MyViewHolder extends RecyclerView.ViewHolder{

    public CardView mCardView;
    public TextView mTextView;
    public TextView texp;
    public Button pdf;
    public ToggleButton select;
    public ImageView pro;
    public MainActivity activity;

    public  Context ipaset;
    public TextView loc;
    public View layout;

      View forresumeview;
    String forresume;
    private RecyclerView.ViewHolder s;




    public MyViewHolder(final View v) {

        super(v);


        mCardView = (CardView) v.findViewById(R.id.card_view);
        mTextView = (TextView) v.findViewById(R.id.tv_text);
        texp = (TextView) v.findViewById(R.id.setexp);
        pdf = (Button) v.findViewById(R.id.moreinfo);
        select = (ToggleButton) v.findViewById(R.id.select);
        pro = (ImageView) v.findViewById(R.id.setpropic);
        loc = (TextView) v.findViewById(R.id.setlocation);


        forresumeview=v;




    }




    void bind(String name, Integer exp, String location, final Bitmap image, final String obj ){
            mTextView.setText(name);

            texp.setText(String.valueOf(exp) + " yrs");
            pro.setImageBitmap(image);
            loc.setText(location);







    }

    public void doonce(final String s){


        pdf.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View vs) {

                Intent intent = new Intent(forresumeview.getContext(), PdfViewer.class);

                intent.putExtra("obj", s);


                forresumeview.getContext().startActivity(intent);


                //  Log.d("sdasd", obj);


            }
        });

    }




}

public MyAdapter(String[] myDataset,Integer[] exp,Bitmap[] pro,String[] loc,String[] obj){


    mDatasetname = myDataset;

    mexp=exp;
    mpro=pro;
    mloc=loc;

    mobj=obj;




}



@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

    context=parent.getContext();

   View vs = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);

    MyViewHolder vh = new MyViewHolder(vs);
    return vh;
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position){


    holder.bind(mDatasetname[position],mexp[position],mloc[position],mpro[position],mobj[position]);

    holder.doonce(mobj[position]);









}





@Override
public int getItemCount() { return mDatasetname.length; }

}

这是答案,,,,我尝试过了!!!编码愉快......