我是android新手。我正在尝试使用Intent从适配器移至活动,并且已从片段中调用了适配器。我收到以下异常:
Process: ****.****.****, PID: 16146
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:130)
at android.content.Intent.<init>(Intent.java:6751)
at ****.****.****.HealthAdapter$1.onClick(HealthAdapter.java:48)
at android.view.View.performClick(View.java:7339)
at android.view.View.performClickInternal(View.java:7305)
at android.view.View.access$3200(View.java:846)
at android.view.View$PerformClick.run(View.java:27788)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7076)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
这是我的适配器类
public class HealthAdapter extends RecyclerView.Adapter<HealthAdapter.ViewHolder> {
private Context context;
private List<Health> list;
private Context mContext;
private static final String TAG = "RecyclerViewAdapter";
public HealthAdapter(Context context, List<Health> list) {
this.context = context;
this.list = list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.single_item, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
Health health = list.get(position);
holder.textTitle.setText(health.getTitle());
holder.textId.setText(String.valueOf(health.getId()));
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.d(TAG, "onClick: clicked on: " + mImageNames.get(position));
Log.d(TAG, "onClick: clicked on: ");
//Toast.makeText(mContext, mImageNames.get(position), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, HealthDetailsActivity.class);
//intent.putExtra("image_name", mImageNames.get(position));
intent.putExtra("id", 1);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView textTitle, textId;
LinearLayout parentLayout;
public ViewHolder(View itemView) {
super(itemView);
textTitle = itemView.findViewById(R.id.main_title);
textId = itemView.findViewById(R.id.main_id);
parentLayout = itemView.findViewById(R.id.parent_layout);
}
}
这是我从Fragment调用适配器的代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_healthtopics, container, false);
View healthFragmentUI = inflater.inflate(R.layout.fragment_healthtopics, container, false);
hList = (RecyclerView) healthFragmentUI.findViewById(R.id.main_list);
healthList = new ArrayList<>();
adapter = new HealthAdapter(getActivity(),healthList);
linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//dividerItemDecoration = new DividerItemDecoration(hList.getContext(), linearLayoutManager.getOrientation());
hList.setHasFixedSize(true);
hList.setLayoutManager(linearLayoutManager);
//hList.addItemDecoration(dividerItemDecoration);
hList.setAdapter(adapter);
// Get the application context
//mContext = getContext();
mActivity = getActivity();
getData();
return healthFragmentUI;
}
请帮助我
答案 0 :(得分:1)
您正在将上下文分配给上下文对象,然后使用mContext
Intent intent = new Intent(mContext, HealthDetailsActivity.class);
在此处将mContext更改为上下文
与以下内容相同:
mContext.startActivity(intent);
答案 1 :(得分:0)
您应该定义一个上下文并删除另一个
private Context context;
private Context mContext;
答案 2 :(得分:-1)
更改适配器构造函数。
public HealthAdapter(Context context, List<Health> list) {
this.mContext = context;
this.list = list;
}