Как обратиться к View текущего Item'a ViewPager'а?

Рейтинг: 1Ответов: 1Опубликовано: 28.04.2015

У меня есть ViewPager, для заполнения которого я использую ViewPagerAdapter extends PagerAdapter.
Адаптер создаёт Item для ViewPager'a методом:

 @Override
   public Object instantiateItem(ViewGroup container,final int position) {}

Необходимо:

  1. заполнить ViewPager старыми данными.
  2. Выполнить анимацию горизонтального progressBar на текущем элементе.
  3. Обновить ViewPager.

Вопрос: Как обратиться к View (ProgressBar'у) текущего item, чтобы выполнить анимацию. В каких методах всё это можно сделать?

Например:

  1. Старые данные 30 процентов. Сначала отображаются старые данные.
  2. Затем происходит загрузка до 54 процентов.
  3. В результате мы видим страничку с 54 процентами. На других элементах (Item'ах) данные тоже должны в итоге обновиться. Просто мы этого не видим и на других элементах анимация не нужна

Всё это происходит по событию Activity onCreate. Данные на item'aх не должны обновляться при других событиях.

public class MyViewPagerAdapter extends PagerAdapter {
private Activity mActivity;
private int mPageCount;
private List<SummaryResult.Summary> summaryInfoList;
int currentStatus;
int currentPeriodNum;
public MyViewPagerAdapter(Activity activity,int pageCount, List<SummaryResult.Summary> summaryInfoList,int currentStatus,int currentPeriodNum) {
    mActivity = activity;
    mPageCount = pageCount;
    this.summaryInfoList = summaryInfoList;
    this.currentStatus = currentStatus;
    this.currentPeriodNum = currentPeriodNum;
}

View mCurrentView;

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    super.setPrimaryItem(container, position, object);
    mCurrentView = (View)object;


    String text = ((TextView)mCurrentView.findViewById(R.id.periodTitleTextView)).getText().toString();

    if (text != null){
        Log.w("Log_page",text);
    }

    Log.w("Log_page","position = " + position);

}

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

@Override
public boolean isViewFromObject(View view, Object obj) {
    return (view ==(View)obj);
}

@Override
public Object instantiateItem(ViewGroup container,final int position) {
    ViewGroup viewGroup = (ViewGroup)mActivity.getLayoutInflater().inflate(
            R.layout.item_card_summary, null);

    SummaryResult.Summary result = summaryInfoList.get(position);

    String[] numbers = {"","Первый","Второй","Третий","Четвёртый","Пятый","Шестой","Седьмой","Восьмой","Девятый","Десятый","Одинадцатый","Двенадцатый"};

    TextView periodTitleTextView = (TextView)viewGroup.findViewById(R.id.periodTitleTextView);
    TextView periodDurationTextView = (TextView)viewGroup.findViewById(R.id.periodDurationTextView);
    final TextView progressTextView = (TextView)viewGroup.findViewById(R.id.progressTextView);
    TextView factTextView = (TextView)viewGroup.findViewById(R.id.factTextView);
    TextView planTextView = (TextView)viewGroup.findViewById(R.id.planTextView);
    LinearLayout errorBar = (LinearLayout)viewGroup.findViewById(R.id.errorBar);
    TextView noMetrAccessTextView = (TextView)viewGroup.findViewById(R.id.noMetrAccessTextView);
    TextView companyStopTextView = (TextView)viewGroup.findViewById(R.id.companyStopTextView);
    TextView factTitleTextView = (TextView)viewGroup.findViewById(R.id.factTitleTextView);
    LinearLayout factLinearLayout = (LinearLayout)viewGroup.findViewById(R.id.factLinearLayout);
    ImageView statusImageView = (ImageView)viewGroup.findViewById(R.id.statusImageView);
    TextView planVisitsTextView = (TextView)viewGroup.findViewById(R.id.planVisitsTextView);
    TextView factVisitsTextView = (TextView)viewGroup.findViewById(R.id.factVisitsTextView);



    container.addView(viewGroup);
    return viewGroup;
}


@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
    //must be overridden else throws exception as not overridden.
    collection.removeView((View) view);
}

@Override
public float getPageWidth(int position) {
    return 0.89f;
}




enum CurentStatus{
    CompanyNorm(0),
    CompanyStop(1),
    CompanyError(2);

    private final int value;

    private CurentStatus(int value){
        this.value = value;
    }

    public int getIntValue(){
        return value;
    }
}

}

Ответы

▲ 1

Можно попробовать задать тег при помощи setTag() для progressBar, и потом найти это view с помощью findViewWithTag(mytag)