片段不起作用并且有错误
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());
);
【讨论】:
以上是关于片段不起作用并且有错误的主要内容,如果未能解决你的问题,请参考以下文章