0

このブログ投稿InfamousViewHolder Pattern in my custom CursorAdapter in newView method に従っています Custom RelativeLayout クラスを作成し、bindView にデータを入力します。

問題は、これらのメソッドが呼び出されなかったことです。ViewHolder パターンを実装するとリストが正しく満たされるため、setListAdapter を正しく設定しました。

実装。ここにコード:

public class SearchUserListViewRow extends RelativeLayout{
    public ImageView avatar = null;
    public TextView name = null;
    public ToggleButton inviteButton = null;
    public ToggleButton followButton = null;
    public FoundUser user;

    public SearchUserListViewRow(Context context) {
        super(context);
        LayoutInflater.from(context).inflate(R.layout.search_friend_row, this);
        avatar = (ImageView) findViewById(R.id.avatar);
        name = (TextView) findViewById(R.id.user_name);
        inviteButton = (ToggleButton) findViewById(R.id.invite_button);
        followButton = (ToggleButton) findViewById(R.id.follow_button);
    }


    public void init(Cursor cursor) {
        user = UsersProcessor.toFoundUser(cursor);

        name.setText(user.alias);
        inviteButton.setChecked(user.invited);
        inviteButton.setVisibility(Section.TO_INVITE.equals(user.section) ? 
                View.VISIBLE : View.GONE);
        inviteButton.setTag(user);

        followButton.setEnabled(!user.invited);
        followButton.setChecked(user.isGuru);
        followButton.setVisibility(Section.TO_FOLLOW.equals(user.section) ? 
                View.VISIBLE : View.GONE);
        followButton.setTag(user);
    }
}

およびアダプター:

public class UserCursorAdapter extends CursorAdapter {

    public UserCursorAdapter(Context context, Cursor c, int flags) {
        super(context, c, flags);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        View v = new SearchUserListViewRow(context);       
        return v;
    }


    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        SearchUserListViewRow row = (SearchUserListViewRow)v;
        //ViewHolder like stuff
        row.text = "foo";
    }
}

およびserarch_friend_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/txt_box"
    android:orientation="horizontal"
    android:layout_marginTop="-3px"
    android:padding="@dimen/padding_row" >

    <ImageView
        android:id="@+id/avatar"
        android:layout_width="@dimen/image_user_avatar"
        android:layout_height="@dimen/image_user_avatar"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" />

    <FrameLayout
        android:id="@+id/button_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true">

        <ToggleButton
            android:id="@+id/follow_button"
            android:visibility="gone" />

        <ToggleButton
            android:id="@+id/invite_button"0000000000000000000
            android:visibility="gone" />

    </FrameLayout>

    <TextView
        android:id="@+id/user_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="@dimen/content_padding_normal"
        android:layout_toLeftOf="@id/button_container"
        android:layout_toRightOf="@id/avatar"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:textSize="@dimen/text_size_medium"
        android:textStyle="bold" />

</RelativeLayout>

前もって感謝します。

4

1 に答える 1

0

newView基にbindViewなるカーソルが空の場合は呼び出されない場合があります。最初にこれを確認してください。

2番目のポイントは、ビューのタグにアイテムのビューへの参照を格納するという主なアイデアのため、コードはViewHolderパターンを表していないことです。新しいアイテムの作成/インフレーションを実行し、呼び出しを行った後、findViewById()戻り値をホルダーインスタンスに配置する必要があります。次に、ホルダーインスタンスをタグに保存します。

最後に、カーソルの値をビューにバインドするときは、タグからホルダーを取得し、たとえばsetText()、などを入力setImage()します。

于 2012-12-20T18:04:36.387 に答える