Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击从firebase获取的Cardview_Android_Nullpointerexception - Fatal编程技术网

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的片段)。这无法工作,异常解释了问题。如果您只是想用片段的布局启动一个活动,那么在本例中创建一个活动并使用片段的布局。