0

ListView私が持っている Android アプリでは、ユーザーが行要素を変更できる場所がいくつかあります。たとえば、ユーザーのコメントに賛成票を投じることができるボタンがあります (Facebook の「いいね」または Google+ の「+1」を考えてみてください)。

ユーザーがボタンをクリックすると、描画可能な画像が変化します。これはうまくいっています。 問題:

ユーザーが下にスクロールしてから上に戻ると、状態は保存されず、元のドローアブルに戻ります。

メソッドでコードを実行するadapter getView()方法は次のとおりです。

public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {

        dCBlue = (Drawable) getContext().getResources().getDrawable(
                    R.drawable.ic_comment_blue);
        dCGray = (Drawable) getContext().getResources().getDrawable(
                    R.drawable.ic_comment_gray);

        convertView = inflater.inflate(R.layout.review_layout, parent,
        holder = new ViewHolder();
            holder.b2 = (Button) convertView.findViewById(R.id.bReview2);
            convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
        convertView.setOnCreateContextMenuListener(null);
    }

      // later on down 

    Review r = getItem(position);
    votedOn = r.wasVoted;
    final Drawable dVBlue = (Drawable) getContext().getResources()
                .getDrawable(R.drawable.ic_upvote_blue);
    final Drawable dVGray = (Drawable) getContext().getResources()
                .getDrawable(R.drawable.ic_upvote_gray);

    if (votedOn.equals("1")) {
         holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null, dVBlue, null);
         holder.b2.setTag(R.drawable.review_button_press);
     } else {
         holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null,dVGray, null);
         holder.b2.setTag(R.drawable.review_button);
     }

     holder.b2.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {

        if (holder.b2.getTag().equals(R.drawable.review_button)) {
            holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null, dVBlue, null);
    holder.b2.setTag(R.drawable.review_button_press);

        } else {
    holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null, dVGray, null);
        holder.b2.setTag(R.drawable.review_button);

         }
        bVote = holder.b2;
        new HelpfulTask().execute(passing);


    });
 return convertView;

}

私はこれを順不同に配置していますか?

4

1 に答える 1

1

レビュー オブジェクトを更新しているように見えません。投票を示すために行を表すオブジェクトを更新する必要があり、ビューバインディングがそれを処理するだけです。

于 2013-06-07T15:31:14.293 に答える