【问题标题】: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 中显示新闻布局

标签: java android-studio android-fragments fragment android-fragmentactivity


【解决方案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());
                }
            });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多