片段不起作用并且有错误

fragment not work and have errors

让应用程序从服务器获取图像和文本,然后在卡片视图中显示 并有另一个应用程序有不同的选项卡,哪个选项卡从 Fragment 扩展

所以想把我的第一个应用程序放在第二个应用程序标签之一中。 像这样 :

所以从片段中的第一个应用程序粘贴我的主要 activity 代码但有错误:

public class news extends Fragment {

    private RecyclerView recyclerView;
    private ArrayList<Deatails> data;
    private DataAdapter adapter;


    private View myFragmentView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    myFragmentView= inflater.inflate(R.layout.news, container, false);
      initViews();
    return myFragmentView;
}

    private void initViews() {

        recyclerView = (RecyclerView)myFragmentView.findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }

    private void loadJSON() {

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://memaraneha.ir/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            RequestInterface request = retrofit.create(RequestInterface.class);
            Call<JSONResponse> call = request.getJSON();

            final ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.show();

            call.enqueue(new Callback<JSONResponse>() {
                @Override
                public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                    progressDialog.dismiss();

                    JSONResponse jsonResponse = response.body();
                    data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                    adapter = new DataAdapter(MainActivity.this, data);
                    recyclerView.setAdapter(adapter);
                }

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

这是我的错误:

,

,

您应该在 Fragment 中使用 link 到 View

内部片段

private View myFragmentView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    myFragmentView = inflater.inflate(R.layout.news, container, false);
    return myFragmentView;
}

您不能只将粘贴代码从 activity 复制到您的片段。 您需要从片段视图中启动 findViewById。

myFragmentView.findViewById(R.id.addYourViewHere);

你不能在片段的 OnCreateView 方法之前 运行 init 方法。

当您使用片段时,您必须覆盖它的 onCreateView 方法。

示例:

public class FavFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_favorite, container, false);

    mRecyclerView = (RecyclerView) v.findViewById(R.id.my_recycler_view);
    layoutEmpty = (RelativeLayout) v.findViewById(R.id.layoutEmpty);
    btnShowOnMap = (FloatingActionButton) v.findViewById(R.id.btnShowOnMap);
    fabRoulette = (FloatingActionButton) v.findViewById(R.id.fabRoulette);
    mainView = v.findViewById(R.id.mainView);


    return v;
}

我解决了我的问题,因此它的正确代码适用于人们:

public class news extends Fragment {

    private RecyclerView recyclerView;
    private ArrayList<Deatails> data;
    private DataAdapter adapter;
    private View myFragmentView;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        myFragmentView= inflater.inflate(R.layout.news, container, false);
        initViews();
        return myFragmentView;
    }

    private void initViews() {

        recyclerView = (RecyclerView)myFragmentView.findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }

    private void loadJSON() {

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://memaraneha.ir/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            RequestInterface request = retrofit.create(RequestInterface.class);
            Call<JSONResponse> call = request.getJSON();

            final ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.show();

            call.enqueue(new Callback<JSONResponse>() {
                @Override
                public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                    progressDialog.dismiss();

                    JSONResponse jsonResponse = response.body();
                    data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                    adapter = new DataAdapter(getActivity(), data);
                    recyclerView.setAdapter(adapter);
                }

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