Как изменить видимость кнопки ImageBapton в PagerAdapter? - PullRequest
0 голосов
/ 31 января 2012

Я хочу изменить видимость кнопок моего изображения в моем PagerAdapter. Не похоже, что я могу ссылаться на части макета в instantiateItem через id, я могу ссылаться только на полный макет. Это странно, потому что кажется, что я все еще могу ссылаться на свои веб-просмотры через id.

Как мне подойти к этому? Это то, что я пытаюсь сделать, но я получаю исключение нулевого указателя в последней строке, показанной ниже:

    public Object instantiateItem(View collection, int position) {
        ImageButton btnRight = (ImageButton) findViewById(R.id.buttonright);
        ImageButton btnLeft = (ImageButton) findViewById(R.id.buttonleft);
        if (position == 0) {
            resLayout = R.layout.the_webview;
            urltoload = theUrls[position];
            resId = R.id.webview0;
            btnLeft.setVisibility(View.INVISIBLE);
        View view = inflater.inflate(resLayout, null);

...

        if (position != 2) {
            mainWebView = (WebView) view.findViewById(resId);
            mainWebView.getSettings().setJavaScriptEnabled(true);
            mainWebView.loadUrl(urltoload);

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

Мне нужна позиция для соответствующей настройки видимости, поэтому я не могу сделать это в onCreate. Я знаю, что для обычного адаптера я могу использовать getView, но не могу использовать его для PagerAdapter.

Я также прочитал, что я могу просто создать свой собственный поток обновления пользовательского интерфейса через обработчики, но как мне это сделать в этом случае?

Спасибо.

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Что касается вашего Q при обновлении пользовательского интерфейса в потоке, проверьте runOnUiThread здесь

0 голосов
/ 01 февраля 2012

Ответ на это прямо здесь: http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/comment-page-1/#comment-14065

Очевидно, вы должны ссылаться на относительный или линейный макет, в котором находится ваша кнопка, иначе findViewById не сможет найти то, на что вы ссылаетесь.

0 голосов
/ 01 февраля 2012

Попробуйте, где "itemLayout" - ваш макет:

View thisLayout = inflater.inflate(R.layout.itemLayout, null);

btnLeft = (ImageButton) thisLayout.findViewById(R.id.buttonleft);

<do stuff with btnLeft>

((ViewPager) collection).addView(thisLayout);

return thisLayout;
...