У меня есть представление ресайклера, которое выбирает данные из 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);
}
}