【问题标题】:RecyclerView in Fragment couldnt be found - null object reference [duplicate]无法找到片段中的 RecyclerView - 空对象引用 [重复]
【发布时间】:2016-05-13 12:59:18
【问题描述】:

我使用本教程 https://www.learn2crack.com/2016/02/recyclerview-json-parsing.html 在我的应用程序中解析 JSON。我在 Android Studio 中使用了选项卡式模板。我添加了两个片段,VFragment 应该显示 JSON。 MainActivity 教程中的代码(在教程中)我放在 VFragment 中。我的 fragment_v 布局也有 recyclerview 元素。

VFragment.java:

package com.tomwellmann.apptodate;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import java.util.ArrayList;
import java.util.Arrays;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class VFragment extends Fragment {
    private RecyclerView recyclerView;
    private ArrayList<AndroidVersion> data;
    private DataAdapter adapter;

    public VFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        initViews();
        return inflater.inflate(R.layout.fragment_v, container, false);
    }

    private void initViews(){
        recyclerView = (RecyclerView)getActivity().findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }

    private void loadJSON(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://api.learn2crack.com")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call = request.getJSON();
        call.enqueue(new Callback<JSONResponse>() {

            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                JSONResponse jsonResponse = response.body();
                data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                adapter = new DataAdapter(data);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
                Log.d("Error",t.getMessage());
            }
        });
    }
}

Logcat:

Process: com.tw.a, PID: 6653 java.lang.NullPointerException: 
Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)' 
on a null object reference at com.tw.a.VFragment.initViews(VFragment.java:46)

【问题讨论】:

    标签: java android json android-fragments


    【解决方案1】:

    这里有问题

    return inflater.inflate(R.layout.fragment_v, container, false);
    

    你可以试试这个

     View RootView;//Global
        @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) { 
    
             RootView = inflater.inflate(R.layout.fragment_v, container, false);
             initViews();
             return RootView;
        }
    
         private void initViews(){
                recyclerView = (RecyclerView)RootView.findViewById(R.id.card_recycler_view);
                recyclerView.setHasFixedSize(true);
                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
                recyclerView.setLayoutManager(layoutManager);
                loadJSON();
            }
    

    您应该访问的更多详细信息

    Why findViewById() doesn't work as getActivity().findViewById() here?

    【讨论】:

    • 天啊!非常感谢,成功了!
    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多