片段不起作用并且有错误

Posted

技术标签:

【中文标题】片段不起作用并且有错误【英文标题】:fragment not work and have errors 【发布时间】:2017-02-06 03:34:10 【问题描述】:

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

所以想把我的第一个应用程序放在第二个应用程序选项卡中。 像这样 :

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

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

这是我的错误:

,,,,

,,,,

【问题讨论】:

请也显示您的活动代码 我添加了主要活动。但主要活动没有错误 你用过碎片吗?您是否尝试过查看任何显示如何扩展布局和初始化视图的片段教程? 所有示例只在片段中显示 1button 。没有那么多代码...你能帮我吗? Activity 没问题,你也应该在 xml 中显示新闻布局 【参考方案1】:

当你使用片段时,你必须重写它的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;

【讨论】:

我编辑我的代码外观。真的 ?所以我的 3 个错误解决了,但我的代码中仍然有 3 个错误 请提供有关这 3 个错误的更多信息。【参考方案2】:

您应该在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 方法。

【讨论】:

我编辑我的代码外观。真的 ?所以我的 3 个错误解决了,但我的代码中仍然有 3 个错误 @erfan 你在 R.layout.news 中有 R.id.card_recycler_view 吗?哪里有错误?【参考方案3】:

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

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

【讨论】:

以上是关于片段不起作用并且有错误的主要内容,如果未能解决你的问题,请参考以下文章

Android SQLite 更新行不起作用并且没有显示错误

Snackbar 在片段类中不起作用

Onclicklistener 在片段列表视图中不起作用

共享元素转换在父片段和子片段之间不起作用(嵌套片段)

片段 getActivity 不起作用

listview onclick toast在片段中不起作用[重复]