Android 单击从firebase获取的Cardview
我是在我的新闻浏览者那里做的:Android 单击从firebase获取的Cardview,android,nullpointerexception,Android,Nullpointerexception,我是在我的新闻浏览者那里做的: public class NewsViewHolder extends RecyclerView.ViewHolder { View mView; Context context; public NewsViewHolder(final View itemView) { super(itemView); mView = itemView; itemView.setOnClickLi
public class NewsViewHolder extends RecyclerView.ViewHolder {
View mView;
Context context;
public NewsViewHolder(final View itemView) {
super(itemView);
mView = itemView;
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), DetalleFragment.class);
view.getContext().startActivity(intent);
}
});
}
public void setTitular(String titular) {
TextView post_titular = (TextView) mView.findViewById(R.id.titleText);
post_titular.setText(titular);
}
public void setImage(Context ctx, String image){
ImageView post_image = (ImageView) mView.findViewById(R.id.imageView);
Picasso.with(ctx).load(image).into(post_image);
}
}
问题在于,当我在cardview中单击时,会抛出下一个错误:
E/AndroidRuntime:致命异常:主进程:
S.laramira.atellez.moroninfo,PID:5200
android.content.ActivityNotFoundException:无法找到显式
活动课
{es.laramira.atellez.moroninfo/es.laramira.atellez.moroninfo.Fragments.DetalleFragment};
您是否在AndroidManifest.xml中声明了此活动?在
android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)
在
execStartActivity(Instrumentation.java:1523)
在android.app.Activity.startActivityForResult(Activity.java:4224)上
android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
在
android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
在android.app.Activity.startActivityForResult(Activity.java:4183)上
android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
在android.app.Activity.startActivity(Activity.java:4507)上
android.app.Activity.startActivity(Activity.java:4475)位于
NewsViewHolder$1.onClick(NewsViewHolder.java:32)
在android.view.view.performClick(view.java:5610)中
查看$PerformClick.run(view.java:22265)
handleCallback(Handler.java:751)位于
dispatchMessage(Handler.java:95)位于
Looper.loop(Looper.java:154)位于
android.app.ActivityThread.main(ActivityThread.java:6077)位于
java.lang.reflect.Method.invoke(本机方法)位于
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我在我的AndroidManifest.xml中定义了新的活动,但我不知道如何解决这个问题
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="es.laramira.atellez.moroninfo">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ActivityDetalle"></activity>
</application>
</manifest>
我在Stackoverflow和其他网站上找到了很多答案,但我无法解决这个问题…你的
上下文c代码>从未初始化,因此
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="es.laramira.atellez.moroninfo">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ActivityDetalle"></activity>
</application>
</manifest>
View v= LayoutInflater.from(c).inflate(R.layout.activity_detalle,parent,false);
return new NewsViewHolder(v);
返回null
更新。
据我所知,您只想将onClickListener
分配给一个项目
创建和设置另一个适配器不会解决您的问题。我认为这是完全错误的方式
要将onClickListener
添加到卡中,您需要编辑NewsViewHolder
:
public NewsViewHolder(View itemView) {
...
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//your stuff
}
...
});
更新。
不幸的是,stackoverflow是一个可以为具体问题找到答案的地方,而不是“我插入了一些代码,它仍然不起作用”。这是浪费时间。
首先你必须学会如何阅读
以下是一些资源:
通过调用构造函数(如
public MyAdapter(Context c) {
this.c=c;
}
并在初始化适配器时调用活动中的构造函数,如
MyAdapter adaoter = new MyAdapter(this);
这样你的上下文就不会是空的 您开始的是片段,而不是活动
new Intent(view.getContext(), DetalleFragment.class);
但是不能对片段使用context.startActivity
如果你想开始你的“活动”,就像我在你的
清单,将调用替换为
new Intent(view.getContext(), ActivityDetalle.class);
编辑:
如果要从上下文启动活动,则该上下文不属于
对于活动,您必须添加意图标志intent.flag\u activity\u NEW\u TASK
如何初始化它??我用参数上下文创建了一个构造函数。但是我抛出了同样的错误检查,如果您的视图在onCreateViewHolder
中膨胀且不为空。我不能在实现适配器时停止应用程序。您的意思是,您在初始化适配器类时出现异常吗?您在Nikhya的回答下的回答中只提供了异常的开头。我这样做了,并且抛出了错误其他错误:java.lang.RuntimeException:无法启动activity ComponentinfoInitialize活动中的适配器变量,您正在将适配器与recycler视图绑定,我使用以下命令对其进行初始化:“MyAdapter adapter=new MyAdapter(this);RecyclerView rv=(RecyclerView)findViewById(R.id.news_列表);rv.设置适配器(适配器);'它抛出相同的错误:java.lang.RuntimeException:无法启动activity ComponentInfo请确保您在适配器类中实现了参数化构造函数,如我在回答中所解释的。并将要在该构造中使用的值传递给您,或者您正试图将一个片段作为活动启动(它似乎是一个名为DetalleFragment.class的片段)。这无法工作,异常解释了问题。如果您只是想用片段的布局启动一个活动,那么在本例中创建一个活动并使用片段的布局。