Android 如何使用选项卡视图片段绑定RecyclerView中的数据
我的应用程序中有3个选项卡。假设第一个是A、B和C。我的MainActivity声明并设置了一个选项卡侦听器,我的每个选项卡又有3个活动。我的问题是,在选项卡A中,我用截击加载数据。在选项卡B中,我也加载了不同的数据。但有时我的RecyclerView,数据很奇怪(选项卡A中显示的选项卡B中的数据或选项卡B成功加载数据,但选项卡A没有显示任何内容)。我在每个活动选项卡中加载数据,如下面的代码所示。我做错了吗?还是应该在MainActivity中加载所有数据?任何回答都会对我有帮助。谢谢你Android 如何使用选项卡视图片段绑定RecyclerView中的数据,android,android-fragments,tabs,android-recyclerview,Android,Android Fragments,Tabs,Android Recyclerview,我的应用程序中有3个选项卡。假设第一个是A、B和C。我的MainActivity声明并设置了一个选项卡侦听器,我的每个选项卡又有3个活动。我的问题是,在选项卡A中,我用截击加载数据。在选项卡B中,我也加载了不同的数据。但有时我的RecyclerView,数据很奇怪(选项卡A中显示的选项卡B中的数据或选项卡B成功加载数据,但选项卡A没有显示任何内容)。我在每个活动选项卡中加载数据,如下面的代码所示。我做错了吗?还是应该在MainActivity中加载所有数据?任何回答都会对我有帮助。谢谢你 @Ov
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.popular_tab, container, false);
searchViewPopular = (SearchView) rootView.findViewById(R.id.searchView_Popular);
popularRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView_Popular);
popularRecyclerView.setHasFixedSize(true);
popularaLinearLayoutManager = new LinearLayoutManager(getContext());
popularGenericAdapter = new GenericAdapter(popularRecyclerView);
popularRecyclerView.setLayoutManager(popularaLinearLayoutManager);
popularRecyclerView.setAdapter(popularGenericAdapter);
popularData = new JSONArray();
filteredPopularData = new JSONArray();
filteredPopularData = ((GlobalVariable)this.getActivity().getApplication()).getPopularData();
loadData();
listener = new GenericAdapter.OnRecyclerViewListener() {
@Override
public void OnRecyclerViewItemClicked(RecyclerView recyclerView, int position) {
}
@Override
public void OnRecyclerViewItemBind(RecyclerView recyclerView, GenericAdapter.GenericHolder view, int position) {
try {
currPopularData = filteredPopularData.getJSONObject(position);
view.textViewTitle.setText(currPopularData.getString("title"));
view.textViewDesc.setText("Popularity : " + currPopularData.getString("popularity"));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public int OnRecyclerViewItemCount(RecyclerView recyclerView) {
return filteredPopularData.length();
}
};
popularGenericAdapter.setOnRecyclerViewListener(listener);
searchViewPopular.setOnQueryTextListener(searchListener);
return rootView;
}
// @Override
// public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
// super.onViewCreated(view, savedInstanceState);
// loadData();
// }
SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String searchText) {
try {
filteredPopularData = ProgramMethod.filterArray(popularData, "title", searchText, false);
popularGenericAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
};
public void loadData() {
final RequestQueue requestQueue;
Network network = new BasicNetwork(new HurlStack());
requestQueue = new RequestQueue(new NoCache(), network);
requestQueue.start();
final String urlAPIGenre = "https://api.themoviedb.org/3/movie/popular?api_key=8517f7eb51ca49a4558f33f8c832c1db";
final String TAG = "";
final JsonObjectRequest jsonGenre = new JsonObjectRequest
(Request.Method.GET, urlAPIGenre, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
popularData = response.getJSONArray("results");
filteredPopularData = popularData;
((GlobalVariable)getActivity().getApplication()).setPopularData(filteredPopularData);
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("filteredPopularData = " + response);
popularGenericAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
});
requestQueue.add(jsonGenre);
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.popular\u选项卡,容器,false);
SearchView Popular=(SearchView)rootView.findviewbyd(R.id.SearchView\u Popular);
PopularRecycleView=(RecycleView)rootView.findViewById(R.id.RecycleView\u Popular);
popularRecyclerView.setHasFixedSize(true);
PopularLinearLayoutManager=新的LinearLayoutManager(getContext());
PopularGenericaAdapter=新的通用适配器(popularRecyclerView);
设置布局管理器(PopularLinearLayoutManager);
PopularRecycleView.setAdapter(PopularGenericaAdapter);
popularData=new JSONArray();
filteredPopularData=new JSONArray();
filteredPopularData=((全局变量)this.getActivity().getApplication()).getPopularData();
loadData();
listener=新的GenericaAdapter.onRecycleServiceWLListener(){
@凌驾
已单击RecyclerViewItem上的公共无效(RecyclerView RecyclerView,int位置){
}
@凌驾
RecycleViewItemBind上的公共void(RecycleView RecycleView,GenericAdapter.GenericHolder视图,int位置){
试一试{
currPopularData=filteredPopularData.getJSONObject(位置);
view.textViewTitle.setText(currpoulardata.getString(“title”);
view.textViewDesc.setText(“流行度:+currpoppopularData.getString(“流行度”));
}捕获(JSONException e){
e、 printStackTrace();
}
}
@凌驾
公共int onRecycleWebItemCount(RecycleWebRecycleWebView){
返回filteredPopularData.length();
}
};
PopularGenericaAdapter.SetonRecycleServiceWListener(侦听器);
searchViewPopular.setOnQueryTextListener(searchListener);
返回rootView;
}
//@覆盖
//已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
//super.onViewCreated(视图,savedInstanceState);
//loadData();
// }
SearchView.OnQueryTextListener searchListener=新建SearchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔值onQueryTextChange(字符串搜索文本){
试一试{
filteredPopularData=ProgramMethod.filterArray(popularData,“title”,searchText,false);
popularGenericAdapter.notifyDataSetChanged();
}捕获(JSONException e){
e、 printStackTrace();
}
返回false;
}
};
公共void loadData(){
最终请求队列请求队列;
网络=新的基本网络(new HurlStack());
requestQueue=newRequestQueue(new NoCache(),网络);
requestQueue.start();
最后一个字符串urlAPIGenre=”https://api.themoviedb.org/3/movie/popular?api_key=8517f7eb51ca49a4558f33f8c832c1db";
最终字符串标记=”;
最终JsonObjectRequest jsonGenre=新JsonObjectRequest
(Request.Method.GET,urlAPIGenre,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
popularData=response.getJSONArray(“结果”);
filteredPopularData=popularData;
((全局变量)getActivity().getApplication()).setPopularData(filteredPopularData);
}捕获(JSONException e){
e、 printStackTrace();
}
System.out.println(“filteredPopularData=“+响应”);
popularGenericAdapter.notifyDataSetChanged();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(标记“Error:+Error.getMessage());
}
});
add(jsonGenre);
}
编辑:
这是我的账单
在第一个选项卡中,它应该是show Textview with text
Popularity
,但在第一次应用程序中打开它的always showTop Rated
content如果您使用viewPager,请尝试添加viewPager.setOffscreenPageLimit(5)代码>在MainActivity中。也许这可能是hep。这可能会阻止在选项卡之间来回滑动时再次加载数据。@ashwinmothill它不工作的屏幕截图可能会help@AshwinMothilal添加,请参见我的编辑