Просмотр Recycler OnClickListener - PullRequest
       164

Просмотр Recycler OnClickListener

0 голосов
/ 06 августа 2020

У меня есть представление ресайклера, которое выбирает данные из URL-адреса и сохраняет их, но я хочу установить OnClickListener, чтобы я мог щелкнуть указанное c поле и отобразить дополнительные данные.

Я попытался реализовать ClickListener, но он выдает ошибку. если этот способ, который я пробовал, не подходит, не стесняйтесь предложить лучший способ для моего кода.

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

package com.example.zlatnakopackajson1;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class PonudiAdapter extends RecyclerView.Adapter<PonudiViewHolder> {

    private Context context;

    ArrayList<Ponudi> ponudis;

    public PonudiAdapter() {
        ponudis = new ArrayList<>();
    }

    public void setData(ArrayList<Ponudi> ponudis) {
        this.ponudis = ponudis;
    }

    @NonNull
    @Override
    public PonudiViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        Context context = parent.getContext();
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View ponudiView = layoutInflater.inflate(R.layout.adapter_view_layout,parent,false);
        return new PonudiViewHolder(ponudiView);
    }

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

        final Ponudi ponudi = ponudis.get(position);
       // holder.sh_sport_id.setText(ponudi.sh_sport_id);

        if (  ponudi.sh_sport_id.equals("1")) {
            holder.sh_sport_id.setText("Фудбал");
            holder.imgSport.setImageResource(R.drawable.fudbal);
        }
        else if (ponudi.sh_sport_id.equals("2") ) {
            holder.sh_sport_id.setText("Хокеј");
            holder.imgSport.setImageResource(R.drawable.hokej);
        }
        else if (ponudi.sh_sport_id.equals("3") ) {
            holder.sh_sport_id.setText("Кошарка");
            holder.imgSport.setImageResource(R.drawable.basketball);
        }
        else if (ponudi.sh_sport_id.equals("4") ) {
            holder.sh_sport_id.setText("Тенис");
            holder.imgSport.setImageResource(R.drawable.tenis);
        }
        else if (ponudi.sh_sport_id.equals("5") ) {
            holder.sh_sport_id.setText("Ракомет");
           // holder.imgSport.setImageResource(R.drawable.handball);
        }
        else if (ponudi.sh_sport_id.equals("6") ) {
            holder.sh_sport_id.setText("MLB");
           // holder.imgSport.setImageResource(R.drawable.mlb);
        }
        else if (ponudi.sh_sport_id.equals("7") ) {
            holder.sh_sport_id.setText("Одбојка");
            holder.imgSport.setImageResource(R.drawable.odbojka);
        }
        else if (ponudi.sh_sport_id.equals("8") ) {
            holder.sh_sport_id.setText("Рагби");
            holder.imgSport.setImageResource(R.drawable.ragbi);
        }
        else if (ponudi.sh_sport_id.equals("9") ) {
            holder.sh_sport_id.setText("Формула");
           // holder.imgSport.setImageResource(R.drawable.formula);
        }
        else if (ponudi.sh_sport_id.equals("10") ) {
            holder.sh_sport_id.setText("Мото Спорт");
           // holder.imgSport.setImageResource(R.drawable.moto);
        }
        else if (ponudi.sh_sport_id.equals("11") ) {
            holder.sh_sport_id.setText("Ватерполо");
            holder.imgSport.setImageResource(R.drawable.vaterpolo);
        }
        else if (ponudi.sh_sport_id.equals("12") ) {
            holder.sh_sport_id.setText("Бокс");
          //  holder.imgSport.setImageResource(R.drawable.boks);
        }
        else if (ponudi.sh_sport_id.equals("13") ) {
            holder.sh_sport_id.setText("Футсал");
            holder.imgSport.setImageResource(R.drawable.futsal);
        }
        else if (ponudi.sh_sport_id.equals("14") ) {
            holder.sh_sport_id.setText("Пинг Понг");
          //  holder.imgSport.setImageResource(R.drawable.tenis);
        }
        else {
            holder.sh_sport_id.setText("Останато");
            holder.imgSport.setImageAlpha(0);
        }

        holder.tim1.setText(ponudi.tim1);
        holder.tim2.setText(ponudi.tim2);
        holder.liga_header.setText(ponudi.liga_header);


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

                Intent intent = new Intent(context,MatchActivity.class);
                context.startActivity(intent);
            }
        });

    }

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

Класс ViewHolder:

package com.example.zlatnakopackajson1;

import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class PonudiViewHolder extends RecyclerView.ViewHolder {

    TextView sh_sport_id;
    TextView tim1;
    TextView tim2;
    TextView liga_header;
    ImageView imgSport;

    LinearLayout parent_layout;

    public PonudiViewHolder(@NonNull View itemView) {
        super(itemView);

     sh_sport_id = itemView.findViewById(R.id.textView1);
     tim1 = itemView.findViewById(R.id.textView2);
     tim2 = itemView.findViewById(R.id.textView3);
     liga_header = itemView.findViewById(R.id.textView4);
     imgSport = itemView.findViewById(R.id.imgSport);
     parent_layout = itemView.findViewById(R.id.parent_layout);

    }
}

Ошибка Logcat:

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
        at android.content.ComponentName.<init>(ComponentName.java:131)
        at android.content.Intent.<init>(Intent.java:6510)
        at com.example.zlatnakopackajson1.PonudiAdapter$1.onClick(PonudiAdapter.java:114)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Новая активность:

package com.example.zlatnakopackajson1;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MatchActivity extends AppCompatActivity {

    private static final String TAG = "MatchActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_match);
        Log.d(TAG, "OnCrate: started");

        getIncomingIntent();




    }


    private void  getIncomingIntent() {
Log.d(TAG, "getIncomingIntent: checking for incoming intent");

        if (getIntent().hasExtra("tim1") && getIntent().hasExtra("tim2")) {
              Log.d(TAG, "getIncomingIntetnt: found intent extras.");

              String tim1 = getIntent().getStringExtra("tim1");
              String tim2 = getIntent().getStringExtra("tim2");

              setItems(tim1,tim2);
        }
    }

    private  void setItems (String tim1, String tim2) {
        Log.d(TAG,"setItems: setting the tims to widgets.");

        TextView Tim1 = findViewById(R.id.txtMatchT1);
        Tim1.setText(tim1);
        TextView Tim2 = findViewById(R.id.txtMatchT2);
        Tim2.setText(tim2);

    }

}

1 Ответ

0 голосов
/ 06 августа 2020

Здесь, в вашем классе PonudiAdapter , у вас есть закрытый член Context. Но вы не устанавливаете значение для context в своем конструкторе класса.

Измените конструктор класса, чтобы передать объект контекста

public class PonudiAdapter extends RecyclerView.Adapter<PonudiViewHolder> {

    private Context context;

    ArrayList<Ponudi> ponudis;

    public PonudiAdapter(Context context) {
        ponudis = new ArrayList<>();
        this.context = context;

    }
    ...
}

Затем в вашем классе, где вы инициализируете PonudiAdapter , передаете контекст приложения.

PonudiAdapter adapter = new PonudiAdapter(getApplicationContext());

Надеюсь, это ответит на ваш вопрос. Не стесняйтесь комментировать, если у вас возникнут другие проблемы.

...