Android 如何从第一个选项卡更新viewpager第二个选项卡中的recyclerview?
我目前面临的一个问题是,如果用户向其时间表中添加了内容,则应在第二个选项卡的Android 如何从第一个选项卡更新viewpager第二个选项卡中的recyclerview?,android,android-fragments,android-viewpager,fragmentpageradapter,Android,Android Fragments,Android Viewpager,Fragmentpageradapter,我目前面临的一个问题是,如果用户向其时间表中添加了内容,则应在第二个选项卡的当前时间表中的回收视图中刷新该内容。但是,它从不更新,用户必须返回主菜单,返回时间表活动,然后选择当前时间表。我相信这与我的ViewPager及其适配器有关。我只是看不出我哪里出了问题,我确信我错过了一些简单的东西。请你修改一下我的代码好让它正常工作吗 这是我的密码: viewpager类 public class Timetables extends AppCompatActivity{ TabLayout t
当前时间表中的回收视图中刷新该内容。但是,它从不更新,用户必须返回主菜单,返回时间表
活动,然后选择当前时间表
。我相信这与我的ViewPager
及其适配器有关。我只是看不出我哪里出了问题,我确信我错过了一些简单的东西。请你修改一下我的代码好让它正常工作吗
这是我的密码:
viewpager类
public class Timetables extends AppCompatActivity{
TabLayout tabLayout;
ViewPager viewPager;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timetables);
viewPager = (ViewPager) findViewById(R.id.viewPager);
TimetablesAdapter timetablesAdapter = new TimetablesAdapter(getSupportFragmentManager(), Timetables.this);
viewPager.setAdapter(timetablesAdapter);
viewPager.setOffscreenPageLimit(2);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
//viewPager.setCurrentItem(tab.getPosition());
}
});
}
}
fragmentpageradapter类:
public class TimestableAdapter extends FragmentPagerAdapter{
String tabNames[] = new String[] {"All timetables", "Current Timetable", "Expired"};
Context context;
public TimestableAdapter(FragmentManager fragmentManager, Context context){
super(fragmentManager);
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new AllTimetables();
case 1:
return new CurrentTimetables();
case 2:
return new ExpiredTimetables();
default:
return null;
}
}
@Override
public int getCount() {
return tabNames.length;
}
@Override
public CharSequence getPageTitle(int position) {
return tabNames[position];
}
}
这是CurrentTimeline
课程:
public class CurrentTimetables extends Fragment {
RecyclerView recyclerView;
static MusicRecyclerAdapter adapter;
RecyclerView.LayoutManager layoutManager;
ArrayList<Timetables> list;
public CurrentTimetables(){
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.currenttimetable, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.timetablerecyclerView);
recyclerView.setHasFixedSize(true);
list = new ArrayList<Timetables>();
adapter = new MusicRecyclerAdapter(list, CurrentTimetables.this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
tabBackground = new TabBackground(CurrentTimetables.this, list, spinnerItems, adapter, spinnerAdapter);
tabBackground.populateConditionsList();
inputs = new ArrayList<>();
populate();
return rootView;
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
}
@Override
public void onStart() {
super.onStart();
}
public void populate(){
String dbURL = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
RequestQueue requestQueue = Volley.newRequestQueue(fragment.getActivity());
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest
(dbURL, new Response.Listener<JSONArray>(){
@Override
public void onResponse(JSONArray jsonArray) {
if(!list.isEmpty()){
list.clear();
}
try {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
int timetableID = Integer.parseInt(jsonObject.getString("timetableID"));
String timetableName = jsonObject.getString("timetableName");
String subjectName = jsonObject.getString("subjectName");
Timetables timetables = new Timetables(timetableID, timetableName, subjectName);
list.add(timetables);
adapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}
);
requestQueue.add(jsonArrayRequest);
}
}
公共类CurrentTimetables扩展片段{
回收视图回收视图;
静态音乐循环适配器;
RecyclerView.LayoutManager LayoutManager;
数组列表;
公共时刻表(){
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.currentTimeline,container,false);
recyclerView=(recyclerView)rootView.findViewById(R.id.timetablerecyclerView);
recyclerView.setHasFixedSize(true);
列表=新的ArrayList();
adapter=新的MusicRecyclerAdapter(列表,CurrentTimetables.this);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getActivity().getApplicationContext());
linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(适配器);
tabBackground=新的tabBackground(CurrentTimetables.this、list、spinnerItems、adapter、spinnerAdapter);
tabBackground.populateConditionsList();
输入=新的ArrayList();
填充();
返回rootView;
}
@凌驾
恢复时公开作废(){
super.onResume();
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
}
@凌驾
public void onStart(){
super.onStart();
}
公共空白填充(){
字符串dbURL=“xxxxxxxxxxxxxxxxxxxxxxxxx”;
RequestQueue RequestQueue=Volley.newRequestQueue(fragment.getActivity());
JsonArrayRequest JsonArrayRequest=新JsonArrayRequest
(dbURL,新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray JSONArray){
如果(!list.isEmpty()){
list.clear();
}
试一试{
for(int i=0;i
这真的意味着有很多人可以帮助我
谢谢您必须在mainActivity中创建一个界面。在片段中引用它。它是从一个片段到另一个片段通信的最佳方式。请参考下面的链接
请看一看,如果有任何疑问,我将在此提供帮助。您的代码中需要进行一些更改。如果您检查片段,您将了解它如何与表格视图一起工作
检查代码,我已经从上述代码
public class CurrentTimetables extends Fragment {
RecyclerView recyclerView;
static MusicRecyclerAdapter adapter;
RecyclerView.LayoutManager layoutManager;
ArrayList<Timetables> list;
Context context;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.currenttimetable, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = (RecyclerView) view.findViewById(R.id.timetablerecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
tabBackground = new TabBackground(CurrentTimetables.this, list, spinnerItems, adapter, spinnerAdapter);
tabBackground.populateConditionsList();
// If you have another Component add here using finViewById() and also you can do
// other process here. I just used setUserVisibleHint because it will execute when
// fragment will be visible to user and it will stop over calling to web service.
/**
* Populate Recyclerview data if setUserVisibleHint do not work.
*/
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
populate();
}
}
public void populate() {
String dbURL = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
RequestQueue requestQueue = Volley.newRequestQueue(context);
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(dbURL, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
if (!list.isEmpty()) {
list.clear();
}
try {
list = new ArrayList<Timetables>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
int timetableID = Integer.parseInt(jsonObject.getString("timetableID"));
String timetableName = jsonObject.getString("timetableName");
String subjectName = jsonObject.getString("subjectName");
Timetables timetables = new Timetables(timetableID, timetableName, subjectName);
list.add(timetables);
adapter = new MusicRecyclerAdapter(list, context);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(5 * 1000, 1, 1.0F));
jsonArrayRequest.setShouldCache(false);
requestQueue.add(jsonArrayRequest);
}
@Override
public void onResume() {
super.onResume();
populate();
}
}
公共类CurrentTimetables扩展片段{
回收视图回收视图;
静态音乐循环适配器;
RecyclerView.LayoutManager LayoutManager;
数组列表;
语境;
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
this.context=上下文;
}
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
返回充气机。充气(R.layout.CurrentSchedule,容器,假);
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
recyclerView=(recyclerView)view.findViewById(R.id.timetablerecyclerView);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(上下文));
tabBackground=新的tabBackground(CurrentTimetables.this、list、spinnerItems、adapter、spinnerAdapter);
tabBackground.populateConditionsList();
//如果您有另一个组件,请使用finViewById()在此处添加,您也可以这样做
//这里是另一个进程。我刚才使用了setUserVisibleHint,因为它将在
//该片段将对用户可见,它将停止对web服务的调用。
/**
*如果setUserVisibleHint不起作用,则填充Recyclerview数据。
*/
}