Как получить текстовое представление изнутри - PullRequest
0 голосов
/ 30 марта 2020

Как я могу получить кликабельную строку элемента в textView ?. Я также попробовал много способов помочь мне, как я могу это сделать.

Мой класс адаптера:

    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.pro_workout_list, parent, false);
        return new Proworkoutsclass(view);
    }

    public static class Proworkoutsclass extends RecyclerView.ViewHolder {

        ImageView workoutimage, selection;
        TextView workoutname;

        public Proworkoutsclass(@NonNull View itemView) {
            super(itemView);
            workoutimage = itemView.findViewById(R.id.workoutimage);
            selection = itemView.findViewById(R.id.selection);
            workoutname = itemView.findViewById(R.id.workoutname);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        Glide.with(context).load(proworkoutspojos.get(position).getImage()).centerCrop().into(((Proworkoutsclass)holder).workoutimage);
        ((Proworkoutsclass)holder).workoutname.setText(proworkoutspojos.get(position).getName());
    }

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

Следующий код - моя деятельность по получению значений и проходов Правда класс адаптера

Это моя активность:

 LinearLayoutManager manager = new LinearLayoutManager(AssignWorkout.this, LinearLayoutManager.HORIZONTAL, false);
        mworkouts.setLayoutManager(manager);

        Call<List<Proworkoutspojo>> calls = serviceWrapper.proListCallListCall();
        calls.enqueue(new Callback<List<Proworkoutspojo>>() {
            @Override
            public void onResponse(Call<List<Proworkoutspojo>> call, Response<List<Proworkoutspojo>> response) {
                if(response.isSuccessful())
                {
                    if(response.body()!=null)
                    {
                        viewworkouts(response.body());
                    }
                }
            }

            @Override
            public void onFailure(Call<List<Proworkoutspojo>> call, Throwable t) {
                Log.e("List of workouts", ""+t);
            }
        });

 private void viewworkouts(List<Proworkoutspojo> body) {
        proworkoutAdaptor = new ProworkoutAdaptor(this, body);
        mworkouts.setAdapter(proworkoutAdaptor);
    }

Мой обновленный код:

mworkouts.addOnItemTouchListener(new
                Assighnrecyclertouch(getApplicationContext(), mworkouts, new
                Assighnrecyclertouch.ClickListener() {
                    @Override
                    public void onClick(View view, int position) {

                        Proworkoutspojo proworkoutspojo = proworkoutspojos.get(position);
                        String val = proworkoutspojo.getName();
                        Toast.makeText(AssignWorkout.this, ""+val, Toast.LENGTH_SHORT).show();

                    }

                    @Override
                    public void onLongClick(View view, int position) {

                    }
                }));

Это это необходимое место для выполнения этого действия

Recyclerview page

И, наконец, я получил ошибку:

  java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
        at com.skalegymapp.gymapp.Trainer.AssignWorkout$13.onClick(AssignWorkout.java:281)
        at com.skalegymapp.gymapp.Touch.Assighnrecyclertouch.onInterceptTouchEvent(Assighnrecyclertouch.java:38)

Ошибка Расположение:

Proworkoutspojo proworkoutspojo = proworkoutspojos.get(position);
                        String val = proworkoutspojo.getName();
                        Toast.makeText(AssignWorkout.this, ""+val, Toast.LENGTH_SHORT).show();

1 Ответ

0 голосов
/ 30 марта 2020

Создание вспомогательного класса для RecyclerView

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import androidx.recyclerview.widget.RecyclerView;

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener 
{

private GestureDetector gestureDetector;
private ClickListener clickListener;

public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
    this.clickListener = clickListener;
    gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) {
            View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null) {
                clickListener.onLongClick(child, recyclerView.getChildPosition(child));
            }
        }
    });
}

@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

    View child = rv.findChildViewUnder(e.getX(), e.getY());
    if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
        clickListener.onClick(child, rv.getChildPosition(child));
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}

public interface ClickListener {
    void onClick(View view, int position);

    void onLongClick(View view, int position);
   }
}

Обработка onClick в вашей деятельности

recyclerView.addOnItemTouchListener(new 
    RecyclerTouchListener(getApplicationContext(), recyclerView, new 
    RecyclerTouchListener.ClickListener() {
        @Override
        public void onClick(View view, int position) {

            model = myList.get(position);
            str = model.xyzValue;

        }

        @Override
        public void onLongClick(View view, int position) {

        }
    }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...