Обновление фрагмента TextView из класса адаптера - PullRequest
1 голос
/ 17 мая 2019

Я использую фрагмент, чтобы показать обзор переработчика с предметами.

И у меня есть класс Адаптер для просмотра переработчика.

Каждый раз, когда пользователь нажимает на элемент в окне повторного просмотра, мне нужно изменить текст из фрагмента 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 во фрагменте значениями из выбранного элемента списка.

EDIT

Класс адаптера:

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 ]

1 голос
/ 17 мая 2019

Вы можете использовать следующий способ,

Добавить поле для фрагмента и изменить конструктор адаптера следующим образом,

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.
}
1 голос
/ 17 мая 2019

вы можете создать интерфейс и использовать интерфейс для установки текста в вашем текстовом представлении следующим образом: -

Интерфейс: -

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

использовать интерфейс во фрагменте и передать этот 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");
            }
        });
...