从适配器类更新片段TextView

时间:2019-05-17 12:24:57

标签: android android-recyclerview android-adapter

我正在使用一个片段显示带有项目的回收视图。

而且我有一个用于recyclerview的Adapter类。

每次用户单击recyclerview项时,我都需要从片段TextView中更改文本。

这是适配器类中的onClick方法:

@Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            //showPopupMenu(v, position);


            String positi = marcaList.get(position).getnombre();
            Integer positid = marcaList.get(position).getId();

            Log.d("HOLA PERFIL", "RESPONSE 2 valor=" + position);

            Toast.makeText(mCtx,"Seleccionados dispositivos de la marca "+positi, Toast.LENGTH_SHORT).show();

            SharedPreferences prefs3 =
                    mCtx.getSharedPreferences(MISDATOS, Context.MODE_PRIVATE);



            SharedPreferences.Editor editor3 = prefs3.edit();
            editor3.putString("nombreMarcaNuevoDisp",positi);
            editor3.putInt("idMarcaNuevoDisp",positid);
            editor3.apply();





        } 

我需要使用所选列表项中的值更新片段中TextView中的文本。

编辑

适配器类:

public class MarcasAdapterNuevoDisp extends RecyclerView.Adapter<MarcasAdapterNuevoDisp.ProductViewHolder>  {

    public static String MISDATOS= "MisDatos";
    private Context mCtx;
    private List<Marca> marcaList;
    private SharedPreferences mPref;

    public FragmentManager f_manager;

    public MarcasAdapterNuevoDisp(Context mCtx, List<Marca> marcaList) {
        this.mCtx = mCtx;
        this.marcaList = marcaList;

    }



    public interface OnDataChangeListener{
        public void onDataChanged(int size);
    }


    @Override
    public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.marcas_list, null);
        return new ProductViewHolder(view);
    }

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


        Marca marca = marcaList.get(position);
String url = "https://jogua.es/administrar/application/admin/iconos/";
        //loading the image
        Glide.with(mCtx)
                .load(url+marca.geticono())
                .into(holder.imageView);





    }

    @Override
    public int getItemCount() {

        return marcaList.size();
    }

    class ProductViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView textViewTitle;
        ImageView imageView;


        public ProductViewHolder(View itemView) {
            super(itemView);


            imageView = itemView.findViewById(R.id.imageView);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            //showPopupMenu(v, position);


            String positi = marcaList.get(position).getnombre();
            Integer positid = marcaList.get(position).getId();

            Log.d("HOLA PERFIL", "RESPONSE 2 valor=" + position);

            Toast.makeText(mCtx,"Seleccionados dispositivos de la marca "+positi, Toast.LENGTH_SHORT).show();

            SharedPreferences prefs3 =
                    mCtx.getSharedPreferences(MISDATOS, Context.MODE_PRIVATE);



            SharedPreferences.Editor editor3 = prefs3.edit();
            editor3.putString("nombreMarcaNuevoDisp",positi);
            editor3.putInt("idMarcaNuevoDisp",positid);
            editor3.apply();





        }




    }
}

2 个答案:

答案 0 :(得分:1)

您可以创建一个Interface并使用该接口在textview中设置setText,如下所示:-

接口:-

 public interface IOnItemClickListener {
        void onItemClick(String text);
    }

在片段中使用Interface并将此iOnItemClickListener传递给适配器构造函数:-

private IOnItemClickListener iOnItemClickListener = new IOnItemClickListener() {
        @Override
        public void onItemClick(String text) {

          yourTextView.setText(text);

        }
    };

并在适配器中创建一个对象:-

private IOnItemClickListener iClickListener; 

public SearchAdapter(Context ctx, IOnItemClickListener iClickListener, ArrayList<SearchResponse> arrayList) {
        this.ctx = ctx;
        **this.iClickListener = iClickListener;**
        this.arrayList = arrayList;
    }

以及单击项目时;-

holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iClickListener.onItemClick("pass your text");
            }
        });

答案 1 :(得分:1)

您可以使用以下方式

添加片段字段,并像这样更改您的适配器构造器,

private MarcasFragment fragment;
public MarcasAdapterNuevoDisp(MarcasFragment fragment, List<Marca> marcaList) {
    this.mCtx = fragment.getActivity();
    this.fragment = fragment;
    this.marcaList = marcaList;

}

然后在您的onclick方法中,

@Override
public void onClick(View v) {
    fragment.textView.setText(yourString); //As your textview is public, you can access it from here.
}