Я уже задавал вопрос о своей проблеме, но не нашел правильного решения, поэтому я добавляю сюда все детали.
В моей Деятельности есть TabLayout и viewpager.При создании действия он извлекает данные с сервера и из этих данных динамически добавляет вкладки.Я использую отдельный фрагмент для каждой вкладки таким образом, чтобы данные, соответствующие каждой вкладке, были заполнены в виде списка в фрагменте, который будет отображаться в пейджере представления под макетом вкладки. При непосредственном нажатии на заголовки макета вкладки изменения данныхправильно.Но при перелистывании видового пейджера он работает, но в течение небольшого промежутка времени после изменения заголовка вкладки данные, отображаемые в виде списка, будут иметь предыдущий заголовок вкладки. Он длится только доли секунды, но создаетплохой пользовательский опыт.
Моя активность
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browse_tab);
sharedPreferences = this.getSharedPreferences(GlobalDeclarations.MY_PREFERENCE, Context.MODE_PRIVATE);
user_type = sharedPreferences.getString("user_type",null);
ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
ab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#009FE3")));
ab.setTitle("Plans");
cd = new ConnectionDetector(this);
Intent intent = getIntent();
key_circle = intent.getStringExtra("key_circle");
value_circle = intent.getStringExtra("value_circle");
key_operator = intent.getStringExtra("key_operator");
value_operator = intent.getStringExtra("value_operator");
isMobile = intent.getBooleanExtra("isMobile", false);
if (isMobile) {
spinnerArray = getResources().getStringArray(R.array.recharge_plan_types);
plan_type = "1";
}
else {
spinnerArray = getResources().getStringArray(R.array.dth_plan_types);
plan_type = "1";
}
loadData();
mViewPager= (ViewPager)findViewById(R.id.viewpager);
mViewPager.setOffscreenPageLimit(1);
mTabLayout= (TabLayout)findViewById(R.id.tabs2);
mTabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FF0000"));
mTabLayout.setSelectedTabIndicatorHeight((int) (5 * getResources().getDisplayMetrics().density));
mTabLayout.setTabTextColors(Color.parseColor("#727272"), Color.parseColor("#FF0000"));
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
planList.clear();
mViewPager.setCurrentItem(tab.getPosition());
numTab = tab.getPosition();
plan_type = String.valueOf(numTab+1);
BrowsePlanModel model;
key = mylist.get(numTab);
try {
jsonArray = jsonObject.getJSONArray(key);
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject2 = jsonArray.getJSONObject(i);
model = new BrowsePlanModel();
model.setTalkTime(jsonObject2.optString("talktime"));
model.setValidity(jsonObject2.optString("validity"));
model.setAmount(jsonObject2.optString("amount"));
model.setDescription(jsonObject2.optString("description"));
planList.add(model);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
public ArrayList<BrowsePlanModel> getPlans(){
return planList;
}
@Override
public void onFragmentInteraction(Uri uri) {
}
private void setupViewPager(ViewPager mViewPager,String name) {
adapter.addFragment(new PlasFragment(), name);
mTabLayout.setSelectedTabIndicatorColor(Color.parseColor("#ff0000"));
}
public String getKey_circle() {
return key_circle;
}
public String getValue_circle(){
return value_circle;
}
public String getKey_operator() {
return key_operator;
}
public String getValue_operator(){
return value_operator;
}
public boolean getIsMobile(){
return isMobile;
}
public String getPlan(){
return plan_type;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
default:
return super.onOptionsItemSelected(item);
}
}
class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return new PlasFragment().newInstance(position);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
private void loadData() {
String url = null;
HashMap<String, String> data = new HashMap<>();
data.put("plan", plan_type);
data.put("operator", key_operator);
data.put("circle", key_circle);
if(cd.isConnectingToInternet()) {
if (isMobile) {
url = GlobalDeclarations.URL1;
} else {
url = GlobalDeclarations.URL2;
}
new HTTPRequest(BrowseTabActivity.this, data, null, HTTPRequest.METHOD.GET, BrowseTabActivity.this).execute(url);
}
else{
Toast.makeText(this, "No Internet Connection", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onConnectionStarted() {
}
@Override
public void onConnectionFailed() {
}
@Override
public void onCompleted(JSONObject resultData) {
planList = new ArrayList<>();
mylist = new ArrayList<String>();
BrowsePlanModel model;
if (resultData.has("status")) {
String status = resultData.optString("status");
if (status.equalsIgnoreCase("failed")) {
Toast.makeText(this, resultData.optString("status"), Toast.LENGTH_SHORT).show();
}
else if (status.equalsIgnoreCase("success")) {
try {
jsonObject = resultData.getJSONObject("data");
planList.clear();
adapter = new ViewPagerAdapter(getSupportFragmentManager());
for(Iterator<String> iter = jsonObject.keys();iter.hasNext();) {
key = iter.next();
mylist.add(key);
mTabLayout.addTab(mTabLayout.newTab().setText(key));
mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
setupViewPager(mViewPager,key);
}
mViewPager.setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
planList.clear();
}
}
}
}
}
Мой фрагмент используется для заполнения списка
public class PlasFragment extends Fragment implements HTTPCallback {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
private Spinner spinner_plan_type;
private ListView listView;
private TextView textToast;
private String key_circle;
private String value_circle;
private String key_operator;
private String value_operator;
private String plan_type;
android.support.v7.app.ActionBar ab;
private boolean isMobile;
private SharedPreferences sharedPreferences;
private String userId;
private String apiKey;
private ArrayList<BrowsePlanModel> planList;
private BrowsePlanAdapter adapter ;
private String[] spinnerArray;
ProgressBar prgs;
private BroadcastReceiver mRegistrationBroadcastReceiver;
private android.support.v4.app.NavUtils NavUtils;
MediaPlayer mp;
String table_id;
Integer selected_radio_button;
String wallet_request,type;
JSONObject jsonResult;
ConnectionDetector cd;
View rootview;
private OnFragmentInteractionListener mListener;
public PlasFragment() {
}
public static PlasFragment newInstance(String param1, String param2) {
PlasFragment fragment = new PlasFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.fragment_plas, container, false);
cd = new ConnectionDetector(getContext());
prgs = (ProgressBar)rootview.findViewById(R.id.progressBar1);
listView = (ListView)rootview.findViewById(R.id.list_plan_type);
textToast = (TextView)rootview.findViewById(R.id.text_toast);
key_circle = ((BrowseTabActivity)getActivity()).getKey_circle();
value_circle = ((BrowseTabActivity)getActivity()).getValue_circle();
key_operator = ((BrowseTabActivity)getActivity()).getKey_operator();
value_operator =((BrowseTabActivity)getActivity()).getValue_operator();
isMobile = ((BrowseTabActivity)getActivity()).getIsMobile();
plan_type = ((BrowseTabActivity)getActivity()).getPlan();
loadData();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
BrowsePlanModel browsePlan = (BrowsePlanModel) parent.getItemAtPosition(position);
Intent intent = new Intent();
intent.putExtra("amount", browsePlan.getAmount());
getActivity().setResult(Activity.RESULT_OK,intent);
getActivity().finish();
}
});
return rootview;
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(Uri uri);
}
private void loadData() {
BrowsePlanModel browsePlan;
textToast.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
planList = ((BrowseTabActivity)getActivity()).getPlans();
setAdapter();
}
@Override
public void onConnectionStarted() {
}
@Override
public void onConnectionFailed() {
}
@Override
public void onCompleted(JSONObject resultData) {
planList = new ArrayList<>();
JSONArray jsonArray;
JSONObject jsonObject;
BrowsePlanModel model;
if (resultData.has("status")) {
String status = resultData.optString("status");
if (status.equalsIgnoreCase("failed")) {
prgs.setVisibility(View.GONE);
textToast.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
Toast.makeText(getContext(), resultData.optString("status"), Toast.LENGTH_SHORT).show();
}
else if (status.equalsIgnoreCase("success")) {
try {
jsonArray = resultData.getJSONArray("data");
if (jsonArray.length() > 0 && jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
model = new BrowsePlanModel();
model.setTalkTime(jsonObject.optString("talktime"));
model.setValidity(jsonObject.optString("validity"));
model.setAmount(jsonObject.optString("amount"));
model.setDescription(jsonObject.optString("description"));
planList.add(model);
}
textToast.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
setAdapter();
} else {
planList.clear();
setAdapter();
textToast.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
}
prgs.setVisibility(View.GONE);
} catch (Exception e) {
e.printStackTrace();
planList.clear();
setAdapter();
textToast.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
}
}
}
}
private void setAdapter() {
try {
adapter = new BrowsePlanAdapter(getContext(), planList);
listView.setAdapter(adapter);
Collections.sort(planList);
prgs.setVisibility(View.GONE);
}catch (Exception e){
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
}
}
}
Эта ошибка возникает при смене вкладок, проведением пальцем по экрану просмотра, т. Е. Первая вкладка состоит из данных пополнения, а вторая вкладка - полное время разговора.но при перемещении для изменения вкладки данные предыдущей вкладки отображаются в течение небольшого промежутка времени.Но эта ошибка возникает не тогда, когда я меняю вкладки, выбирая вкладку напрямую, это происходит только при перелистывании на viewpagerЯ застрял с этой проблемой в течение долгого времени, любой, пожалуйста, предложите решение.