Как открыть новое действие, щелкнув по элементу в обзоре переработчика - PullRequest
0 голосов
/ 03 апреля 2019

Как открыть новое действие, щелкнув по элементу в обзоре переработчика. Нажмите на курсы в структуре RecyclerView. Подробная информация о курсе будет отображаться на следующей странице. Я хочу открыть страницы с различной информацией для каждого пункта переработки.

--- RecyclerActivity.java

protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setConten``tView(R.layout.lessons_layout);
    recyclerView=findViewById(R.id.recyclerview);
    MyAdapter myAdapter=new 
    MyAdapter(RecylerActivity.this,Lesson.getdata());
    recyclerView.setAdapter(myAdapter);

    LinearLayoutManager linearLayoutManager=new 
    LinearLayoutManager(RecylerActivity.this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(linearLayoutManager);
}

- MyAdapter.java

public MyAdapter(Context context,ArrayList<Lesson> data){

    this.data = data;
    inflater=LayoutInflater.from(context);

    this.mDataList=data;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v=inflater.inflate(R.layout.list_item,viewGroup,false);
MyViewHolder holder=new MyViewHolder(v);
return holder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
    Lesson ClickedLesson=mDataList.get(i);
    myViewHolder.setData(ClickedLesson,i);

}

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

class MyViewHolder extends RecyclerView.ViewHolder{
    TextView mLessonName,mLessonPoint;
    RelativeLayout rel;

    public MyViewHolder(@NonNull final View itemView) {
        super(itemView);
        mLessonName=(TextView)itemView.findViewById(R.id.tvLessonName);
        mLessonPoint=(TextView)itemView.findViewById(R.id.tvLessonPoint);
        rel=(RelativeLayout)itemView.findViewById(R.id.Rellayout);

    }
    public void setData(Lesson ClickedLesson,int i){
        this.mLessonName.setText(ClickedLesson.getLessonname());
        this.mLessonPoint.setText(ClickedLesson.getPoint());
    }

}

- Lesson.Java

public Lesson() {
}
public Lesson(String lessonname,String point) {
    this.lessonname=lessonname;
    this.point=point;
}

public String getLessonname() {
    return lessonname;
}

public String getPoint() {
    return point;
}

public void setLessonname(String lessonname) {
    this.lessonname = lessonname;
}

public void setPoint(String point) {
    this.point = point;
}
public static ArrayList<Lesson> getdata(){
    ArrayList<Lesson> dataList=new ArrayList<Lesson>();

    Lesson tmp=new Lesson();
    tmp.setLessonname("Matematik");
    tmp.setPoint("BA");
    dataList.add(tmp);
    Lesson tmp2=new Lesson();
    tmp2.setLessonname("Mobil programlama");
    tmp2.setPoint("AA");
    dataList.add(tmp2);
    Lesson tmp3=new Lesson();
    tmp3.setLessonname("Algoritma");
    tmp3.setPoint("BB");
    dataList.add(tmp3);
    Lesson tmp4=new Lesson();
    tmp4.setLessonname("İngilizce");
    tmp4.setPoint("DC");
    dataList.add(tmp4);
    Lesson tmp5=new Lesson();
    tmp5.setLessonname("Yapay zeka");
    tmp5.setPoint("CC");
    dataList.add(tmp5);
    return dataList;
}

- list_item.xml

<RelativeLayout
    android:id="@+id/Rellayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/cardview_shadow_end_color"
    android:clickable="true"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/tvLessonName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ders"
        android:textSize="25sp"
        android:textStyle="bold"
        android:layout_margin="7dp"/>
    <TextView
        android:id="@+id/tvLessonPoint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Not"
        android:textSize="20sp"
        android:layout_alignParentEnd="true"
        android:textStyle="italic"
        android:layout_margin="7dp"/>

</RelativeLayout>

Ответы [ 5 ]

1 голос
/ 03 апреля 2019

Поскольку API радикально изменились, меня не удивит, если вы создадите OnClickListener для каждого элемента. Это не так много хлопот, хотя. В вашей реализации RecyclerView.Adapter<MyViewHolder> вы должны иметь:

private final OnClickListener mOnClickListener = new MyOnClickListener();

@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
    View view = LayoutInflater.from(mContext).inflate(R.layout.myview, parent, false);
    view.setOnClickListener(mOnClickListener);
    return new MyViewHolder(view);
}

Метод onClick:

@Override
public void onClick(final View view) {
    int itemPosition = mRecyclerView.getChildLayoutPosition(view);
    String item = mList.get(itemPosition);
    Toast.makeText(mContext, item, Toast.LENGTH_LONG).show();
}
0 голосов
/ 03 апреля 2019

Определите интерфейс в вашем классе адаптеров как

interface LessonClickListener{
    public void clickedLession(Lesson lession);
}

Теперь инициализируйте это в конструкторе вашего адаптера следующим образом

public MyAdapter(Context context,ArrayList<Lesson> data, LessonClickListener listener){
this.data = data;
inflater=LayoutInflater.from(context);
this.listener=listener;

this.mDataList=data;

}

В вашем MyViewHolder добавьте прослушиватель кликов

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.clickedLession(mDataList.get(getAdapterPosition()));
            }
});

наконец-то реализует этот LessionClickListener из вашей RecyclerActivity и переопределяет clickedLession (). Теперь внутри этого метода вы можете запустить другое действие, отправив данные класса Lession

0 голосов
/ 03 апреля 2019

Попробуйте это,

class MyViewHolder extends RecyclerView.ViewHolder{
TextView mLessonName,mLessonPoint;
RelativeLayout rel;

public MyViewHolder(@NonNull final View itemView) {
    super(itemView);
    mLessonName=(TextView)itemView.findViewById(R.id.tvLessonName);
    mLessonPoint=(TextView)itemView.findViewById(R.id.tvLessonPoint);
    rel=(RelativeLayout)itemView.findViewById(R.id.Rellayout);

    itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                    Intent intent = new Intent(v.getContext(), 
                                    NextActivity.class);
                        v.getContext().startActivity(intent);
                }} }
0 голосов
/ 03 апреля 2019

Давайте попробуем это в вашем onBindViewHolder

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context mContext = v.getContext();
                final Intent intent;
    switch (getAdapterPostion()){
        case 0:
           intent =  new Intent(context, FirstActivity.class);
           break;

        case 1:
            intent =  new Intent(context, SecondActivity.class);
            break;
           ...
        default:
           intent =  new Intent(context, DefaultActivity.class);
           break;
     }
                mContext.startActivity(intent);         
            }
0 голосов
/ 03 апреля 2019

Внутри вашего адаптера добавьте прослушиватель кликов для запуска активности.

 holder.yourItem.setOnClickListener(v -> {
            Intent intent = new Intent(context, YourActivity.class);
            Lesspn lesson = lesson.get(position);
            intent.putExtra("lesson_details", lesson);
            context.startActivity(intent, options.toBundle());
        });

Затем в следующем задании

Lesson lesson = (Lesson) intent.getSerializableExtra("lesson_details");

Ваш урок должен implements Serializable

...