为什么我的 recyclerview onclick 方法不起作用?
Why my recyclerview on click method dont work?
我试图更改我的 RecyclerViewAdapter。我试过我可以点击任何项目并打开一个新片段,以新布局显示我的结果。
但是它不起作用我的错误代码是尝试在空对象上调用虚拟方法。
在我改变它之前它工作但没有在新布局中显示这些东西。
我必须改变什么?
我显示 recyclerview 的 HomeFragment
public class Home_Fragment extends Fragment {
private RecyclerAdapter recyclerAdapter;
private static ArrayList<Data> DATA;
MainViewModel viewModel;
RecyclerView recyclerView;
OnClickListenerEvent eventlistener;
LinearLayoutManager linearLayoutManager;
private static final String TAG = "Home_Fragment";
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
public Home_Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: createview");
// Inflate the layout for this fragment
DATA= new ArrayList<Data>();
View view = inflater.inflate(R.layout.fragment_home_, container, false);
RecyclerView recyclerView = view.findViewById(R.id.recyclerview);
linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerAdapter = new RecyclerAdapter(getActivity(),DATA, eventlistener);
recyclerView.setAdapter(recyclerAdapter);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerAdapter.notifyDataSetChanged();
Log.d(TAG, "onCreateView: viewreturned");
viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
viewModel.getUserMutableLiveData().observe(this, userListUpdateObserver);
OnClickListenerEvent eventlistener = new OnClickListenerEvent(){
@Override
public void respond(int position, String EventName, String Location) {
EventHolder eventHolder=new EventHolder();
Bundle bundle=new Bundle();
bundle.putString("Eventname",EventName);
bundle.putString("Eventclub",Location);
eventHolder.setArguments(bundle);
FragmentManager manager=getFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
transaction.replace(R.id.main_container,eventHolder).commit();
}
};
return view;
}
Observer<ArrayList<Data>> userListUpdateObserver = new Observer<ArrayList<Data>>() {
@Override
public void onChanged(ArrayList<Data> DATA) {
recyclerAdapter = new RecyclerAdapter(getActivity(), DATA, eventlistener);
linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
}
};
@Override
public void onStart() {
super.onStart();
}
}
回收器适配器
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private OnClickListenerEvent eventlistener;
private final ArrayList<Data> DATA;
private LayoutInflater inflater;
private Activity activity;
private Context context;
private static final String TAG = "Recycler";
public RecyclerAdapter(Context context, ArrayList<Data> data, OnClickListenerEvent listener) {
DATA= data;
eventlistener = listener;
inflater = LayoutInflater.from(context);
}
@Override
public RecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder: create Holder");
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.event_cardview, parent, false);
MyViewHolder holder = new MyViewHolder(v, eventlistener);
Log.d(TAG, "onCreateViewHolder: return"+DATA.size());
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: Create holder Items");
//holder.mImage.setImageResource(listdata.get(position).getThubnail());
holder.Eventname.setText(DATA.get(position).getEventName());
holder.Eventclub.setText(DATA.get(position).getEventClub());
holder.Eventhost.setText(DATA.get(position).getEventHost());
holder.Genre.setText(DATA.get(position).getGENRE());
holder.Date.setText(DATA.get(position).getDATE());
if (13 < DATA.get(position).getADRESS().length()) {
holder.City.setLines(2);
holder.City.setEllipsize(TextUtils.TruncateAt.END);
holder.City.setText(DATA.get(position).getADRESS());
}
else{
holder.City.setText(DATA.get(position).getADRESS());
}
holder.Time.setText(DATA.get(position).getStartTIME()+"-"+DATA.get(position).getEndTIME()+" Uhr");
if(!"".equals(DATA.get(position).getPRICE()))
holder.Price.setText(DATA.get(position).getPRICE());
else {
holder.Price.setText("kostenlos");
}
EventHolder eventHolder=new EventHolder();
Bundle bundle=new Bundle();
bundle.putString("Eventname",DATA.get(position).getEventName());
bundle.putString("Location",DATA.get(position).getEventClub());
eventHolder.setArguments(bundle);
}
@Override
public int getItemCount() {
return DATA.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private CardView cv;
ArrayList<Data> DATA;
OnClickListenerEvent eventlistener;
public TextView Eventname,Eventclub,Eventhost,Genre,Date,City,Time,Price;
public TextView ViewEventname,ViewEventclub,ViewEventhost,ViewGenre,ViewDate,ViewCityAdress,ViewTime,ViewPrice,ViewInfo,ViewArtist,ViewFloor,ViewMPeople;
private static final String TAG = "Class";
public MyViewHolder(View v, OnClickListenerEvent listener) {
super(v);
eventlistener=listener;
Log.d(TAG, "ViewHolder: created");
cv=(CardView)v.findViewById(R.id.eventcardview);
Eventname=(TextView)v.findViewById(R.id.EventName);
Eventclub=(TextView)v.findViewById(R.id.EventClub);
Eventhost=(TextView)v.findViewById(R.id.EventHost);
Genre=(TextView)v.findViewById(R.id.Genre);
Date=(TextView)v.findViewById(R.id.Date);
City=(TextView)v.findViewById(R.id.location_adress);
Time=(TextView)v.findViewById(R.id.Time);
Price=(TextView)v.findViewById(R.id.Price);
cv.setOnClickListener(this);
}
@Override
public void onClick(View view) {eventlistener.respond(getAbsoluteAdapterPosition(),DATA.get(getAbsoluteAdapterPosition()).getEventName(), DATA.get(getAbsoluteAdapterPosition()).getEventClub());
}
/*holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOnClickListener(mCallback);
Data data = DATA.get(position);
mCallback.onClick(data);
AppCompatActivity activity = (AppCompatActivity) v.getContext();
EventHolder myFragment = new EventHolder();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.main_container, myFragment).addToBackStack(null).commit();
holder.ViewEventname.setText(DATA.get(position).getEventName());
}
}); */
}
我的片段,我尝试在点击项目时以新布局显示内容
ublic class EventHolder extends Fragment{
TextView eventclub;
TextView vieweventname;
String Eventname;
String location;
public EventHolder()
{
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Eventname=getArguments().getString("Eventname");
location=getArguments().getString("Eventclub");
}
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,@Nullable
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_event_holder, container, false);
vieweventname = (TextView) view.findViewById(R.id.ViewEventName);
eventclub = (TextView) view.findViewById(R.id.EventClub);
vieweventname.setText(Eventname);
eventclub.setText(location);
return view;
}
}
我的 MainActivity,我从我的 php 服务器获得结果
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
getAddressString(latitude, longitude);
final String lat1 = String.valueOf(latitude);
final String lng1 = String.valueOf(longitude);
Log.d(TAG, "onLocationChanged: postition" + " latitude " + latitude + " longitude" + longitude);
JsonObject object;
class AddCoord extends AsyncTask<Void, Void, String> {
public String res;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String res) {
super.onPostExecute(res);
RecyclerView recyclerView= findViewById(R.id.recyclerview);
try {
JSONArray responsearray = new JSONArray(res);
ArrayList<Data> DATA = new ArrayList<>();
//Populate the EmployeeDetails list from response
for (int i = 0; i<responsearray.length();i++){
JSONObject event = responsearray.getJSONObject(i);
Data events = new Data();
events.setId(event.getInt("ID"));
events.setEventName(event.getString("Eventname"));
events.setEventClub(event.getString("Eventlocation"));
events.setEventHost(event.getString("Eventhost"));
events.setGENRE(event.getString("Genre"));
events.setDATE(event.getString("Date"));
events.setADRESS(event.getString("City"));
events.setStartTIME(event.getString("StartTime"));
events.setEndTIME(event.getString("EndTime"));
events.setPRICE(event.getString("Price"));
DATA.add(events); // <<<<<< Here is the Change
}
//Create an adapter with the EmployeeDetails List and set it to the LstView
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(getParent(),DATA);
recyclerView.setAdapter(recyclerAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
// System.out.println(getResponse);
}
@Override
protected String doInBackground(Void... v) {
HashMap<String, String> params = new HashMap<>();
params.put(Config.KEY_EMP_LAT, lat1);
params.put(Config.KEY_EMP_LNG, lng1);
RequestHandler rh = new RequestHandler();
String res = rh.sendPostRequest(Config.URL_ADD, params);
Log.d(TAG, "doInBackground: "+ params);
Log.d(TAG, "doInBackground: SENDED!");
Log.d(TAG, "doInBackground: "+ res);
return res;
}
}
AddCoord ac = new AddCoord();
ac.execute();
}
请在它完美运行之前提供帮助,但在单击时没有显示新片段中的内容。
我要改变什么。
错误:
java.lang.NullPointerException: Attempt to invoke interface method 'void de.n.newnightstar.OnClickListenerEvent.respond(int, java.lang.String, java.lang.String)' on a null object reference
at de.n.newnightstar.RecyclerAdapter$MyViewHolder.onClick(RecyclerAdapter.java:112)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access00(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
尝试从您的 RecyclerAdapter
中删除 onClick
实现,而是像这样将 onclicklistener 放入 onBindViewHolder
中:
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...handle on click...
}
});
public class MyViewHolder extends RecyclerView.ViewHolder{ // implements View.OnClickListener/
private CardView cv;
public TextView Eventname,Eventclub,Eventhost,Genre,Date,City,Time,Price;
public TextView ViewEventname,ViewEventclub,ViewEventhost,ViewGenre,ViewDate,ViewCityAdress,ViewTime,ViewPrice,ViewInfo,ViewArtist,ViewFloor,ViewMPeople;
private static final String TAG = "Class";
public MyViewHolder(View v, OnClickListenerEvent listener) {
super(v);
eventlistener=listener;
Log.d(TAG, "ViewHolder: created");
cv=(CardView)v.findViewById(R.id.eventcardview);
Eventname=(TextView)v.findViewById(R.id.EventName);
Eventclub=(TextView)v.findViewById(R.id.EventClub);
Eventhost=(TextView)v.findViewById(R.id.EventHost);
Genre=(TextView)v.findViewById(R.id.Genre);
Date=(TextView)v.findViewById(R.id.Date);
City=(TextView)v.findViewById(R.id.location_adress);
Time=(TextView)v.findViewById(R.id.Time);
Price=(TextView)v.findViewById(R.id.Price);
ViewEventname=(TextView)v.findViewById(R.id.ViewEventName);
ViewEventclub=(TextView)v.findViewById(R.id.ViewEventClub);
}
绑定视图:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: Create holder Items");
//holder.mImage.setImageResource(listdata.get(position).getThubnail());
holder.Eventname.setText(DATA.get(position).getEventName());
holder.Eventclub.setText(DATA.get(position).getEventClub());
holder.Eventhost.setText(DATA.get(position).getEventHost());
holder.Genre.setText(DATA.get(position).getGENRE());
holder.Date.setText(DATA.get(position).getDATE());
if (13 < DATA.get(position).getADRESS().length()) {
holder.City.setLines(2);
holder.City.setEllipsize(TextUtils.TruncateAt.END);
holder.City.setText(DATA.get(position).getADRESS());
}
else{
holder.City.setText(DATA.get(position).getADRESS());
}
holder.Time.setText(DATA.get(position).getStartTIME()+"-"+DATA.get(position).getEndTIME()+" Uhr");
if(!"".equals(DATA.get(position).getPRICE()))
holder.Price.setText(DATA.get(position).getPRICE());
else {
holder.Price.setText("kostenlos");
}
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
eventlistener.respond(position,
DATA.get(position).getEventName(),
DATA.get(position).getEventClub());
}
});
EventHolder eventHolder=new EventHolder();
Bundle bundle=new Bundle();
bundle.putString("Eventname",DATA.get(position).getEventName());
bundle.putString("Eventclub",DATA.get(position).getEventClub());
eventHolder.setArguments(bundle);
}
我的错误:
ava.lang.NullPointerException: Attempt to invoke interface method 'void de.n.newnightstar.OnClickListenerEvent.respond(int, java.lang.String, java.lang.String)' on a null object reference
at de.n.newnightstar.RecyclerAdapter.onClick(RecyclerAdapter.java:75)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access00(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
我通过将 OnClickListenerEvent 也添加到我从服务器获取数据的主要活动中解决了我的问题。现在一切正常谢谢大家帮助我!
我试图更改我的 RecyclerViewAdapter。我试过我可以点击任何项目并打开一个新片段,以新布局显示我的结果。 但是它不起作用我的错误代码是尝试在空对象上调用虚拟方法。 在我改变它之前它工作但没有在新布局中显示这些东西。 我必须改变什么?
我显示 recyclerview 的 HomeFragment
public class Home_Fragment extends Fragment {
private RecyclerAdapter recyclerAdapter;
private static ArrayList<Data> DATA;
MainViewModel viewModel;
RecyclerView recyclerView;
OnClickListenerEvent eventlistener;
LinearLayoutManager linearLayoutManager;
private static final String TAG = "Home_Fragment";
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
public Home_Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: createview");
// Inflate the layout for this fragment
DATA= new ArrayList<Data>();
View view = inflater.inflate(R.layout.fragment_home_, container, false);
RecyclerView recyclerView = view.findViewById(R.id.recyclerview);
linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerAdapter = new RecyclerAdapter(getActivity(),DATA, eventlistener);
recyclerView.setAdapter(recyclerAdapter);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerAdapter.notifyDataSetChanged();
Log.d(TAG, "onCreateView: viewreturned");
viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
viewModel.getUserMutableLiveData().observe(this, userListUpdateObserver);
OnClickListenerEvent eventlistener = new OnClickListenerEvent(){
@Override
public void respond(int position, String EventName, String Location) {
EventHolder eventHolder=new EventHolder();
Bundle bundle=new Bundle();
bundle.putString("Eventname",EventName);
bundle.putString("Eventclub",Location);
eventHolder.setArguments(bundle);
FragmentManager manager=getFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
transaction.replace(R.id.main_container,eventHolder).commit();
}
};
return view;
}
Observer<ArrayList<Data>> userListUpdateObserver = new Observer<ArrayList<Data>>() {
@Override
public void onChanged(ArrayList<Data> DATA) {
recyclerAdapter = new RecyclerAdapter(getActivity(), DATA, eventlistener);
linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
}
};
@Override
public void onStart() {
super.onStart();
}
}
回收器适配器
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private OnClickListenerEvent eventlistener;
private final ArrayList<Data> DATA;
private LayoutInflater inflater;
private Activity activity;
private Context context;
private static final String TAG = "Recycler";
public RecyclerAdapter(Context context, ArrayList<Data> data, OnClickListenerEvent listener) {
DATA= data;
eventlistener = listener;
inflater = LayoutInflater.from(context);
}
@Override
public RecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder: create Holder");
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.event_cardview, parent, false);
MyViewHolder holder = new MyViewHolder(v, eventlistener);
Log.d(TAG, "onCreateViewHolder: return"+DATA.size());
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: Create holder Items");
//holder.mImage.setImageResource(listdata.get(position).getThubnail());
holder.Eventname.setText(DATA.get(position).getEventName());
holder.Eventclub.setText(DATA.get(position).getEventClub());
holder.Eventhost.setText(DATA.get(position).getEventHost());
holder.Genre.setText(DATA.get(position).getGENRE());
holder.Date.setText(DATA.get(position).getDATE());
if (13 < DATA.get(position).getADRESS().length()) {
holder.City.setLines(2);
holder.City.setEllipsize(TextUtils.TruncateAt.END);
holder.City.setText(DATA.get(position).getADRESS());
}
else{
holder.City.setText(DATA.get(position).getADRESS());
}
holder.Time.setText(DATA.get(position).getStartTIME()+"-"+DATA.get(position).getEndTIME()+" Uhr");
if(!"".equals(DATA.get(position).getPRICE()))
holder.Price.setText(DATA.get(position).getPRICE());
else {
holder.Price.setText("kostenlos");
}
EventHolder eventHolder=new EventHolder();
Bundle bundle=new Bundle();
bundle.putString("Eventname",DATA.get(position).getEventName());
bundle.putString("Location",DATA.get(position).getEventClub());
eventHolder.setArguments(bundle);
}
@Override
public int getItemCount() {
return DATA.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private CardView cv;
ArrayList<Data> DATA;
OnClickListenerEvent eventlistener;
public TextView Eventname,Eventclub,Eventhost,Genre,Date,City,Time,Price;
public TextView ViewEventname,ViewEventclub,ViewEventhost,ViewGenre,ViewDate,ViewCityAdress,ViewTime,ViewPrice,ViewInfo,ViewArtist,ViewFloor,ViewMPeople;
private static final String TAG = "Class";
public MyViewHolder(View v, OnClickListenerEvent listener) {
super(v);
eventlistener=listener;
Log.d(TAG, "ViewHolder: created");
cv=(CardView)v.findViewById(R.id.eventcardview);
Eventname=(TextView)v.findViewById(R.id.EventName);
Eventclub=(TextView)v.findViewById(R.id.EventClub);
Eventhost=(TextView)v.findViewById(R.id.EventHost);
Genre=(TextView)v.findViewById(R.id.Genre);
Date=(TextView)v.findViewById(R.id.Date);
City=(TextView)v.findViewById(R.id.location_adress);
Time=(TextView)v.findViewById(R.id.Time);
Price=(TextView)v.findViewById(R.id.Price);
cv.setOnClickListener(this);
}
@Override
public void onClick(View view) {eventlistener.respond(getAbsoluteAdapterPosition(),DATA.get(getAbsoluteAdapterPosition()).getEventName(), DATA.get(getAbsoluteAdapterPosition()).getEventClub());
}
/*holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOnClickListener(mCallback);
Data data = DATA.get(position);
mCallback.onClick(data);
AppCompatActivity activity = (AppCompatActivity) v.getContext();
EventHolder myFragment = new EventHolder();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.main_container, myFragment).addToBackStack(null).commit();
holder.ViewEventname.setText(DATA.get(position).getEventName());
}
}); */
}
我的片段,我尝试在点击项目时以新布局显示内容
ublic class EventHolder extends Fragment{
TextView eventclub;
TextView vieweventname;
String Eventname;
String location;
public EventHolder()
{
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Eventname=getArguments().getString("Eventname");
location=getArguments().getString("Eventclub");
}
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,@Nullable
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_event_holder, container, false);
vieweventname = (TextView) view.findViewById(R.id.ViewEventName);
eventclub = (TextView) view.findViewById(R.id.EventClub);
vieweventname.setText(Eventname);
eventclub.setText(location);
return view;
}
}
我的 MainActivity,我从我的 php 服务器获得结果
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
getAddressString(latitude, longitude);
final String lat1 = String.valueOf(latitude);
final String lng1 = String.valueOf(longitude);
Log.d(TAG, "onLocationChanged: postition" + " latitude " + latitude + " longitude" + longitude);
JsonObject object;
class AddCoord extends AsyncTask<Void, Void, String> {
public String res;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String res) {
super.onPostExecute(res);
RecyclerView recyclerView= findViewById(R.id.recyclerview);
try {
JSONArray responsearray = new JSONArray(res);
ArrayList<Data> DATA = new ArrayList<>();
//Populate the EmployeeDetails list from response
for (int i = 0; i<responsearray.length();i++){
JSONObject event = responsearray.getJSONObject(i);
Data events = new Data();
events.setId(event.getInt("ID"));
events.setEventName(event.getString("Eventname"));
events.setEventClub(event.getString("Eventlocation"));
events.setEventHost(event.getString("Eventhost"));
events.setGENRE(event.getString("Genre"));
events.setDATE(event.getString("Date"));
events.setADRESS(event.getString("City"));
events.setStartTIME(event.getString("StartTime"));
events.setEndTIME(event.getString("EndTime"));
events.setPRICE(event.getString("Price"));
DATA.add(events); // <<<<<< Here is the Change
}
//Create an adapter with the EmployeeDetails List and set it to the LstView
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(getParent(),DATA);
recyclerView.setAdapter(recyclerAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
// System.out.println(getResponse);
}
@Override
protected String doInBackground(Void... v) {
HashMap<String, String> params = new HashMap<>();
params.put(Config.KEY_EMP_LAT, lat1);
params.put(Config.KEY_EMP_LNG, lng1);
RequestHandler rh = new RequestHandler();
String res = rh.sendPostRequest(Config.URL_ADD, params);
Log.d(TAG, "doInBackground: "+ params);
Log.d(TAG, "doInBackground: SENDED!");
Log.d(TAG, "doInBackground: "+ res);
return res;
}
}
AddCoord ac = new AddCoord();
ac.execute();
}
请在它完美运行之前提供帮助,但在单击时没有显示新片段中的内容。 我要改变什么。
错误:
java.lang.NullPointerException: Attempt to invoke interface method 'void de.n.newnightstar.OnClickListenerEvent.respond(int, java.lang.String, java.lang.String)' on a null object reference
at de.n.newnightstar.RecyclerAdapter$MyViewHolder.onClick(RecyclerAdapter.java:112)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access00(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
尝试从您的 RecyclerAdapter
中删除 onClick
实现,而是像这样将 onclicklistener 放入 onBindViewHolder
中:
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...handle on click...
}
});
public class MyViewHolder extends RecyclerView.ViewHolder{ // implements View.OnClickListener/
private CardView cv;
public TextView Eventname,Eventclub,Eventhost,Genre,Date,City,Time,Price;
public TextView ViewEventname,ViewEventclub,ViewEventhost,ViewGenre,ViewDate,ViewCityAdress,ViewTime,ViewPrice,ViewInfo,ViewArtist,ViewFloor,ViewMPeople;
private static final String TAG = "Class";
public MyViewHolder(View v, OnClickListenerEvent listener) {
super(v);
eventlistener=listener;
Log.d(TAG, "ViewHolder: created");
cv=(CardView)v.findViewById(R.id.eventcardview);
Eventname=(TextView)v.findViewById(R.id.EventName);
Eventclub=(TextView)v.findViewById(R.id.EventClub);
Eventhost=(TextView)v.findViewById(R.id.EventHost);
Genre=(TextView)v.findViewById(R.id.Genre);
Date=(TextView)v.findViewById(R.id.Date);
City=(TextView)v.findViewById(R.id.location_adress);
Time=(TextView)v.findViewById(R.id.Time);
Price=(TextView)v.findViewById(R.id.Price);
ViewEventname=(TextView)v.findViewById(R.id.ViewEventName);
ViewEventclub=(TextView)v.findViewById(R.id.ViewEventClub);
}
绑定视图:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: Create holder Items");
//holder.mImage.setImageResource(listdata.get(position).getThubnail());
holder.Eventname.setText(DATA.get(position).getEventName());
holder.Eventclub.setText(DATA.get(position).getEventClub());
holder.Eventhost.setText(DATA.get(position).getEventHost());
holder.Genre.setText(DATA.get(position).getGENRE());
holder.Date.setText(DATA.get(position).getDATE());
if (13 < DATA.get(position).getADRESS().length()) {
holder.City.setLines(2);
holder.City.setEllipsize(TextUtils.TruncateAt.END);
holder.City.setText(DATA.get(position).getADRESS());
}
else{
holder.City.setText(DATA.get(position).getADRESS());
}
holder.Time.setText(DATA.get(position).getStartTIME()+"-"+DATA.get(position).getEndTIME()+" Uhr");
if(!"".equals(DATA.get(position).getPRICE()))
holder.Price.setText(DATA.get(position).getPRICE());
else {
holder.Price.setText("kostenlos");
}
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
eventlistener.respond(position,
DATA.get(position).getEventName(),
DATA.get(position).getEventClub());
}
});
EventHolder eventHolder=new EventHolder();
Bundle bundle=new Bundle();
bundle.putString("Eventname",DATA.get(position).getEventName());
bundle.putString("Eventclub",DATA.get(position).getEventClub());
eventHolder.setArguments(bundle);
}
我的错误:
ava.lang.NullPointerException: Attempt to invoke interface method 'void de.n.newnightstar.OnClickListenerEvent.respond(int, java.lang.String, java.lang.String)' on a null object reference
at de.n.newnightstar.RecyclerAdapter.onClick(RecyclerAdapter.java:75)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access00(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
我通过将 OnClickListenerEvent 也添加到我从服务器获取数据的主要活动中解决了我的问题。现在一切正常谢谢大家帮助我!