1

私はいくつかのリスト項目レイアウトを使用していますが、項目レイアウトにはいくつかの画像を入れたいViewstubがあります。

私の目的は、最初に ViewStub を見つけて、個人的なレイアウトを設定し、それで遊ぶことです。ただし、一部の ViewStub が見つかりません。

public class TJAdapter extends CursorAdapter {
    ....
    public void bindView(View view, Context context, Cursor cursor) {
        View item = view;
        ViewStub contentstub = (ViewStub)item.findViewById(R.id.content_stub);

        if (contentstub == null){
            LOG.error("TJ,contentstub is null");
        } else  {
            LOG.error("TJ,contentstub is not null");
            contentstub.setLayoutResource(R.layout.icon_image);
            View iconImage = contentstub.inflate();
        }
        ....
    }

    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        final View view = mInflater.inflate(R.layout.list_item, parent, false);
        bindView(view, context, cursor);
    }
}

ログ出力は次のようになります。

 TJ,bindView is called
 TJ,contentstub is not null
 TJ,bindView is called
 TJ,contentstub is null
 TJ,bindView is called
 TJ,contentstub is not null
 TJ,bindView is called
 TJ,contentstub is not null
 TJ,bindView is called
 TJ,contentstub is null
 TJ,bindView is called
 TJ,contentstub is not null

私はそれに多くの時間を費やしましたが、なぜこれが起こるのか分かりません。

体が助けてくれる?

================================================== ===============

ブラディブラが示唆したように、今ではiconImageを見つけることができます。しかし、次のアイテムが影響を受ける理由がよくわかりません。リストアイテムを押すことができなくなりました。応答しませんでした。

ImageButton iconImage = null;
ViewStub contentstub = (ViewStub)item.findViewById(R.id.content_stub);
if (contentstub == null){
    LOG.error("TJ,contentstub is null");
    iconImage = (ImageButton)item.findViewById(R.id.icon_image);
} else  {
    LOG.error("TJ,contentstub is not null");
    contentstub.setLayoutResource(R.layout.list_item_icon_image);
    View image = contentstub.inflate();
    iconImage = (ImageButton)image.findViewById(R.id.icon_image);

}

if (iconImage == null) {
    LOG.error("TJ,iconImage is null");
} else {
    LOG.error("TJ, iconImage is not null");
}
4

1 に答える 1

0

contentstub.inflate();ViewStub のコンテンツを呼び出すと、その ID を含めて置き換えられます。への別の呼び出しでビューがリサイクルされると、ViewStub が に置き換えられたためbindView、 の検索は失敗します。R.id.content_stubR.layout.icon_image

layout/icon_image.xml解決策は、検索でR.id.content_stub何も見つからない場合に設定した ID を探すことです。

また、価値があるため、手動で呼び出す必要はありませbindViewnewView。それは自動的に処理されるべきです。

于 2013-11-05T22:34:01.217 に答える