Содержимое вкладки обновления Android - PullRequest
0 голосов
/ 23 октября 2018

После учебника кодовых меток я пытаюсь реализовать действие, в котором я бы отображал контент из базы данных комнаты.Для его обновления требуется доступ к текстовому представлению (содержимому вкладки).Но лучшее, что я могу сделать, - это обновить заголовок вкладки, даже если я настроил текстовое представление для содержимого.

В двух словах, у меня есть табуляция, к которой я добавляю вкладку,Я установил макет для недавно добавленной вкладки.Затем я открываю текстовое представление представления вкладки, чтобы обновить содержимое.Идентификатор textview - правильный, но вместо этого он меняет заголовок вкладки.Я неправильно понял концепцию customview?

[ОБНОВЛЕНИЕ] После нескольких модификаций кажется, что проблема в том, что созданные фрагменты и те, которые я пытаюсь обновить, не совпадают: первые созданыс целью, а другие нет.Поэтому я не могу получить доступ к их представлению, чтобы обновить их содержимое.

Теперь немного кода, чтобы проиллюстрировать:

У меня есть основное действие

public class Main2Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);     

    TabLayout tabLayout = findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab2"));

    final ViewPager viewPager = findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter
            (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);

    // Setting a listener for clicks.
    viewPager.addOnPageChangeListener(new
            TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(
            new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    viewPager.setCurrentItem(tab.getPosition());
                    int index = viewPager.getCurrentItem();
                    PagerAdapter adapter = ((PagerAdapter) viewPager.getAdapter());
                    TabFragment fragment = adapter.getFragment(index);
                    fragment.setSettings();
                }

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

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

Егомакет

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".Main2Activity"
tools:showIn="@layout/activity_main2">

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/toolbar"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/tab_layout"/>

</RelativeLayout>

фрагмент для моих вкладок

public class TabFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private View fragview;

public TabFragment() {
    // Required empty public constructor
}

public static TabFragment newInstance(int sectionNumber) {
    TabFragment fragment = new TabFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    this.fragview = inflater.inflate(R.layout.fragment_tab, container, false);
    TextView textView = (TextView) this.fragview.findViewById(R.id.text_tab);
    textView.setText("TAB ");
    return this.fragview;
}

public void setSettings(){
    TextView textView = (TextView) this.fragview.findViewById(R.id.text_tab);
    textView.setText("DONE ");
    }
}

его макет

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TabFragment">

<TextView
    android:id="@+id/text_tab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_blank_fragment" />

и адаптер

public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
private Context context;
private Map<Integer, TabFragment> pageReferenceMap = new HashMap<Integer, TabFragment>();

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {
    TabFragment myFragment = TabFragment.newInstance(position);
    pageReferenceMap.put(position, myFragment);
    return new TabFragment();
}

@Override
public void destroyItem (ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
    pageReferenceMap.remove(position);
}

@Override
public int getCount() {
    return mNumOfTabs;
}

public TabFragment getFragment(int index) {
    return pageReferenceMap.get(index);
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

tab.getCustomView() вернет вам пользовательское представление, используемое для этой вкладки.

Вы путаете между собственным представлением вкладки и представлением фрагмента (содержащимся в viewPager).

Вы установили то же самоемакет для вашей вкладки и TabFragment

Здесь

tabLayout.addTab(tabLayout.newTab().setCustomView(R.layout.fragment_tab)
        .setText("Tab1"));

И Здесь

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

Первыйвещь: Вы должны переименовать fragment_tab во что-то вроде custom_tab_layout, чтобы избежать этой путаницы.

Теперь вы хотите обновить текст содержимого (фрагмента), поэтому вам нужно получить фрагмент из viewPager, которыйВы можете найти здесь

...