Обновление фрагмента вкладки TextViews во время выполнения - PullRequest
0 голосов
/ 27 января 2019

Я изучал, как выполнить действие с помощью вкладок, и очень близко подошел к завершению. К сожалению, я столкнулся с некоторым препятствием.

После того, как я следовал великолепному руководству, я создал интерактивное действие с tabLayout и ViewPager для отображения фрагмента.

Каждая вкладка отображает один и тот же макет, который представляет собой столбец TextViews слева, который сохраняет их значение по умолчанию, и еще один столбец TextViews, который должен получать свое значение из разных мест.

В качестве теста я заставлял каждую вкладку отправлять разные текстовые значения в соответствующие текстовые представления (например, вкладке № 1 было назначено использование «Внизу», № 2 назначено использование «Наверху») - что выполняется через прослушиватель onTabSelected .

Проблема, с которой я сталкиваюсь, заключается в том, когда текст назначается TextViews. Он никогда не отображается при выборе вкладки. Это иногда отображается на следующей вкладке, которую я открываю. Иногда также отображаются значения назначений вкладки 1 на вкладке 3 после того, как я уже открыл вкладку 2 перед открытием вкладки 3.

Каждый другой TextView, с которым я работал, обновляется сразу, когда я использую setText (). Тем не менее, я очень новичок в использовании табуляции, так что я вполне могу что-то испортить.

Distribution.java

package local.mobileapps.bryandouglas.supremeshoppinglist;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class Distribution extends FragmentActivity {
    private Context context;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_distribution);

        context = this;

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                switch (tab.getPosition()) {
                    case 0:
                        TabFragment.cream.setText("Downstairs");
                        TabFragment.freshnessBottles.setText("Downstairs");
                        TabFragment.soap.setText("Downstairs");
                        TabFragment.paperCups.setText("Downstairs");
                        TabFragment.shortStirSticks.setText("Downstairs");
                        TabFragment.longStirSticks.setText("Downstairs");
                        TabFragment.cafeRoyale.setText("Downstairs");
                        TabFragment.hotChocolate.setText("Downstairs");
                        TabFragment.equal.setText("Downstairs");
                        TabFragment.sugar.setText("Downstairs");
                        TabFragment.greenTea.setText("Downstairs");
                        TabFragment.orangePekoe.setText("Downstairs");
                        break;

                    case 1:
                        TabFragment.cream.setText("Upstairs");
                        TabFragment.freshnessBottles.setText("Upstairs");
                        TabFragment.soap.setText("Upstairs");
                        TabFragment.paperCups.setText("Upstairs");
                        TabFragment.shortStirSticks.setText("Upstairs");
                        TabFragment.longStirSticks.setText("Upstairs");
                        TabFragment.cafeRoyale.setText("Upstairs");
                        TabFragment.hotChocolate.setText("Upstairs");
                        TabFragment.equal.setText("Upstairs");
                        TabFragment.sugar.setText("Upstairs");
                        TabFragment.greenTea.setText("Upstairs");
                        TabFragment.orangePekoe.setText("Upstairs");
                        break;

                    case 2:
                        TabFragment.cream.setText("Shipping");
                        TabFragment.freshnessBottles.setText("Shipping");
                        TabFragment.soap.setText("Shipping");
                        TabFragment.paperCups.setText("Shipping");
                        TabFragment.shortStirSticks.setText("Shipping");
                        TabFragment.longStirSticks.setText("Shipping");
                        TabFragment.cafeRoyale.setText("Shipping");
                        TabFragment.hotChocolate.setText("Shipping");
                        TabFragment.equal.setText("Shipping");
                        TabFragment.sugar.setText("Shipping");
                        TabFragment.greenTea.setText("Shipping");
                        TabFragment.orangePekoe.setText("Shipping");
                        break;

                    case 3:
                        TabFragment.cream.setText("Solutions");
                        TabFragment.freshnessBottles.setText("Solutions");
                        TabFragment.soap.setText("Solutions");
                        TabFragment.paperCups.setText("Solutions");
                        TabFragment.shortStirSticks.setText("Solutions");
                        TabFragment.longStirSticks.setText("Solutions");
                        TabFragment.cafeRoyale.setText("Solutions");
                        TabFragment.hotChocolate.setText("Solutions");
                        TabFragment.equal.setText("Solutions");
                        TabFragment.sugar.setText("Solutions");
                        TabFragment.greenTea.setText("Solutions");
                        TabFragment.orangePekoe.setText("Solutions");
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }
}

TabFragment.java

package local.mobileapps.bryandouglas.supremeshoppinglist;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import static android.content.Context.MODE_PRIVATE;

public class TabFragment extends Fragment {
    protected static final String ADMIRAL_DOWNSTAIRS_PREFS_NAME = "AdmiralDownstairsPrefsFile";
    protected static final String ADMIRAL_UPSTAIRS_PREFS_NAME = "AdmiralUpstairsPrefsFile";
    protected static final String ADMIRAL_SHIPPING_PREFS_NAME = "AdmiralShippingPrefsFile";
    protected static final String SOLUTIONS_PREFS_NAME = "SolutionsPrefsFile";

    protected static SharedPreferences AdmiralDownstairsData;
    protected static SharedPreferences AdmiralUpstairsData;
    protected static SharedPreferences AdmiralShippingData;
    protected static SharedPreferences SolutionsData;
    protected static SharedPreferences.Editor editor;

    int position;
    protected static TextView cream;
    protected static TextView freshnessBottles;
    protected static TextView soap;
    protected static TextView paperCups;
    protected static TextView shortStirSticks;
    protected static TextView longStirSticks;
    protected static TextView cafeRoyale;
    protected static TextView hotChocolate;
    protected static TextView equal;
    protected static TextView sugar;
    protected static TextView greenTea;
    protected static TextView orangePekoe;

    public static Fragment getInstance(int position) {
        Bundle bundle = new Bundle();
        bundle.putInt("pos", position);
        TabFragment tabFragment = new TabFragment();
        tabFragment.setArguments(bundle);
        return tabFragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        position = getArguments().getInt("pos");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_tab, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        cream = view.findViewById(R.id.lblCreamValue);
        freshnessBottles = view.findViewById(R.id.lblMilkValue);
        soap = view.findViewById(R.id.lblSoapValue);
        paperCups = view.findViewById(R.id.lblCupValue);
        shortStirSticks = view.findViewById(R.id.lbl4_5StirValue);
        longStirSticks = view.findViewById(R.id.lbl7StirValue);
        cafeRoyale = view.findViewById(R.id.lblCafeRoyaleValue);
        hotChocolate = view.findViewById(R.id.lblHotChocValue);
        equal = view.findViewById(R.id.lblEqualValue);
        sugar = view.findViewById(R.id.lblSugarValue);
        greenTea = view.findViewById(R.id.lblGreenTeaValue);
        orangePekoe = view.findViewById(R.id.lblOrangePekoeValue);
    }
}

ViewPagerAdapter.java

package local.mobileapps.bryandouglas.supremeshoppinglist;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

class ViewPagerAdapter extends FragmentPagerAdapter {

    private String title[] = {"Admiral - Downstairs", "Admiral - Upstairs", "Admiral - Shipping", "Solutions"};

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return TabFragment.getInstance(position);
    }

    @Override
    public int getCount() {
        return title.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return title[position];
    }
}

Я пытался спроектировать его таким образом, чтобы использовать SharedPreferences для хранения и чтения постоянных данных. Для каждой соответствующей вкладки есть специальные файлы sharedPrefs. Вы заметите, что sharedPrefs не были реализованы, и именно так я и хотел протестировать только с базовым setText.

...