мне нужно изменить TextView'
сек текст, который помещается в расположение моей FragmentActivity
, который имеет ViewPager
и ViewPagerAdapter
. В основном я создал панель действий в своем приложении, которая представляет имя текущего видимого Fragment
.Как изменить вид деятельности изнутри фрагментировать ViewPager в:
Поэтому мне нужно, чтобы этот TextView
был изменен при каждом изменении видимого фрагмента в ViewPager
(либо с помощью движения салфетки, либо с помощью TabHost
). Из моего поиска я обнаружил, что этот метод должен помочь мне достичь своей цели:
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
Log.d(TAG, "setUserVisibleHint invoked!");
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser)
{
if (odTab != null && getActivity() != null)
{
Log.d(TAG, "Currently visable tab: "+odTab.getTabTitle());
Toast.makeText(getActivity(), "Currently visable tab: "+odTab.getTabTitle(), Toast.LENGTH_LONG).show();
if (application.getCurrentDataSource() == DataSource.SSRS)
{
if (rsTab.getTabTitle().equals("") || rsTab.getTabTitle() == null)
{
tabName.setVisibility(View.GONE);
}
else
{
tabName.setText(rsTab.getTabTitle());
}
}
else if (application.getCurrentDataSource() == DataSource.SGRDL)
{
Log.d(TAG, "found Title textView from fragmentActivity");
if (odTab.getTabTitle().equals("") || odTab.getTabTitle() == null)
{
((TabsViewPagerFragmentActivity)getActivity()).findViewById(R.id.tvTabName).setVisibility(View.GONE);
}
else
{
Log.d(TAG, "set Title textView to: "+odTab.getTabTitle());
((TextView) ((TabsViewPagerFragmentActivity)getActivity()).findViewById(R.id.tvTabName)).setText(odTab.getTabTitle());
}
}
}
}
}
Я пытался реализовать это в моем фрагменте, но по какой-то причине эта линия:
((TextView) ((TabsViewPagerFragmentActivity)getActivity()).findViewById(R.id.tvTabName)).setText(odTab.getTabTitle());
ничего не делает, хотя эта линия действительно становятся представлены в журнале для каждого изменения фрагмента в ViewPager:
Log.d(TAG, "set Title textView to: "+odTab.getTabTitle());
UPDATE: Мой адаптер:
public class ViewPagerAdapter extends FragmentPagerAdapter
{
private List<Fragment> fragments;
/**
* @param fm
* @param fragments
*/
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
Я что-то не так? есть ли другой способ сделать эту операцию?
Любая помощь будет оценена по достоинству.
Заранее спасибо.
У меня уже есть это в моей деятельности, проблема в том, что заголовок/имя вкладки хранится в объекте внутри фрагмента. поэтому мне нужно получить нужный фрагмент, получить из него этот объект, извлечь его имя и применить его к текстовому виду. и к настоящему времени мне это не удалось. –
ОК. с viewPager.getChildAt (index) вы можете получить представление фрагмента. Вы можете добавить скрытый вид (добавить тег с информацией) в фрагмент и получить представление в действии. – mromer
, пожалуйста, просмотрите обновленный вопрос, я был не прав, и метод, который я использовал, вызывает вызов. Я не могу изменить текст TextView из FragmentActivity из фрагмента –