Вопрос по android, android-viewpager – Android: изменить текст в ViewPager

2

Background

Я пишу приложение, которое использует ViewPager и работает хорошо. Мне нужно иметь возможность выбрать один из макетов (XML-файл) и обновить текстовые и графические изображения на нем. Я пытался раздувать вид и таргетинг с помощью "v.findViewById", что, по-видимому, является решением моего исследования, но, возможно, я поставил его в нужное место, и мне нужно, чтобы оно было лучше объяснено.

My Code (не пытаясь нацелиться)

private ImageView circle;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    circle = (ImageView) findViewById(R.id.circles);

    MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.myViewPager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(1);
    myPager.setOnPageChangeListener(new MyPageChangeListener()); 
}

private int focusedPage = 0;
private class MyPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
    @Override
    public void onPageSelected(int position) {
        focusedPage = position;

        switch (focusedPage) {
            case 0: circle.setImageResource(R.drawable.circles1); break;
            case 1: circle.setImageResource(R.drawable.circles2); break;
            case 2: circle.setImageResource(R.drawable.circles3); break;
            case 3: circle.setImageResource(R.drawable.circles4); break;
        }
    }
}

private class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
        return 4;
    }

    public Object instantiateItem(View collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        switch (position) {
            case 0:
                resId = R.layout.zip;
                break;
            case 1:
                resId = R.layout.forecast;
                break;
            case 2:
                resId = R.layout.settings;
                break;
            case 3:
                resId = R.layout.about;
                break;
        }

        View view = inflater.inflate(resId, null);

        ((ViewPager) collection).addView(view, 0);

        return view;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);

    }

    @Override
    public Parcelable saveState() {
        return null;
    }
}

К вашему сведению: ImageView "Cicle" это изображение из 4 кружков в нижней части экрана, которое обновляется при смене страницы, чтобы показать, на каком экране вы находитесь. работает нормально, просто хотел объяснить.

GOAL

Обновите текстовое представление с именем & quot; город & quot; на макете под названием «прогноз».

Заранее благодарю за любую помощь! После этого небольшого препятствия должно быть легко плыть.

Ваш Ответ

2   ответа
0

When the tag was a String, for some weird reason it never assigned the tag to the View and it always returned null for findViewWithTag. Using the layout id worked though.

Make sure you retrieve the views outside the onCreate(), preferably in the method where u intend to change the text for the text views. Trying to access them in onCreate returns null. My previous understanding was that, as soon as you call the MyPageAdapter, it will call the instantiateItem and so one should be able to find the views soon after that. But that isnt the case.

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

3

я не гарантирую, что это работает, но у меня была похожая проблема с ViewPager с использованием пакета совместимости, который я решил с помощью этого:

По вашему мнению наinstatiateItem Функция делает setTag с вашим resId:

view.setTag(resId);

Затем, когда вам нужно изменить свой "город" делать:

View baseLayout = myPager.findViewWithTag(R.layout.forecast);
TextView city = (TextView) baseLayout.findViewById(R.id.city_id);

кудаR.id.city_id это идентификатор вашего TextView.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded plowdk51

Похожие вопросы