Views in Fragment are null

2020-02-07 14:08发布

问题:

Im still working on my Android App. Now im facing this problem:

Code:

package smoca.ch.kreagen.Fragments;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import io.realm.Realm;
import io.realm.RealmQuery;
import smoca.ch.kreagen.R;
import smoca.ch.kreagen.models.Idea;

public class SingleIdeaFragment extends Fragment{
    private TextView title;
    private TextView owner;
    private TextView description;
    private Realm realm;
    private Idea idea;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View layout = inflater.inflate(R.layout.single_idea_fragment_layout, container, false);  // inflate layout for Fragment

        idea = getSingleIdea(getActivity().getBaseContext());

        title = (TextView) container.findViewById(R.id.singleIdeaTitle);
        owner = (TextView) container.findViewById(R.id.singleIdeaOwner);
        description = (TextView) container.findViewById(R.id.singleIdeaDescription);

        title.setText(idea.getTitle());
        owner.setText(idea.getOwnerId());
        description.setText(idea.getText());

        return layout;
    }

    public Idea getSingleIdea(Context ctx) {
        realm = Realm.getInstance(ctx);
        RealmQuery<Idea> ideaQuery = realm.where(Idea.class);
        idea = ideaQuery.findFirst();
        return idea;
    }
}

Error:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at smoca.ch.kreagen.Fragments.SingleIdeaFragment.onCreateView(SingleIdeaFragment.java:35)

I know, the problem is that my TextViews (title, owner, description) are null.. But i dont know why. I assigned them to the TextView's from the layout, referencing the Id's.

What am I doing wrong?

Thanks & Greetings John

回答1:

When you called inflater.inflate, you specified your third parameter, attachToRoot, as false. This means that what gets returned by the inflater is just the view for R.layout.single_idea_fragment_layout. Thus, findViewById should be called on layout rather than container

title = (TextView) layout.findViewById(R.id.singleIdeaTitle);
owner = (TextView) layout.findViewById(R.id.singleIdeaOwner);
description = (TextView) layout.findViewById(R.id.singleIdeaDescription);