有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java片段不工作并且有错误

让应用程序从服务器获取图像和文本,然后在卡片视图中显示 enter image description here 还有另一个应用程序,它有不同的标签,哪个标签是从Fragment扩展而来的 enter image description here

所以我想把我的第一个应用放在第二个应用标签中。 这样地: enter image description here

因此,在片段中粘贴第一个应用程序中的我的主要活动代码,但有错误:

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());
                }
            });
    }
}

这是我的错误:

enter image description here

,

enter image description here

,

enter image description here


共 (3) 个答案

  1. # 1 楼答案

    您应该在Fragment中使用指向View的链接

    内部片段

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

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

    myFragmentView.findViewById(R.id.addYourViewHere);
    

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

  2. # 2 楼答案

    我解决了我的问题,因此它为人们提供了正确的代码:

    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());
                    }
                });
        }
    }
    
  3. # 3 楼答案

    当您使用fragment时,必须重写它的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;
    }