0

リストの内部CustomAdapterで、ユーザーが行の1つを押したときに、リスト内の行の背景色を変更したいと思います。

リストの各行にオブジェクトを含む静的クラスがあります。

static class ViewHolder {
    ImageView image;
    TextView text;   
}

ホルダーには私のリスト内の要素が含まれています:

 holder = new ViewHolder();
 holder.image = (ImageView) convertView.findViewById(R.id.imageView1); 
 holder.text = (TextView) convertView.findViewById(R.id.textView1); 
 convertView.setTag(holder);

 holder.image.setImageResource(items.get(position).getImage());
 holder.text.setText(items.get(position).getTextToView());

このconvertViewに、次のsetOnTouchListenerように追加しました。

 convertView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch(event.getAction()) {

            case MotionEvent.ACTION_DOWN:

                //Toast.makeText(c, "DOWN", Toast.LENGTH_SHORT).show();
                break;
            case MotionEvent.ACTION_UP:
                //Toast.makeText(c, "UP", Toast.LENGTH_SHORT).show();
                break;
            }

            return false;
        }

    });

私はこれを試しました:

    convertView.setBackgroundColor(Color.RED); 

しかし、私の従順な不満は、あるconvertViewべきでfinalあり、それが他のコードに干渉すると言っています。

Toastこれは、ユーザーが私のリストの行を押したときにを上げるのに完全に機能します。しかし、押された行の背景色を変更するにはどうすればよいですか?前もって感謝します。

4

3 に答える 3

3

「final」修飾子を、convertViewを指すオブジェクトに設定してみてください。

final View view = convertView;

holder = new ViewHolder();
holder.image = (ImageView) view.findViewById(R.id.imageView1); 
holder.text = (TextView) view.findViewById(R.id.textView1); 
view.setTag(holder);

holder.image.setImageResource(items.get(position).getImage());
holder.text.setText(items.get(position).getTextToView());    

// And the listener
view.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch(event.getAction()) {

        case MotionEvent.ACTION_DOWN:
            view.setBackgroundColor(Color.RED); 
            //Toast.makeText(c, "DOWN", Toast.LENGTH_SHORT).show();
            break;
        case MotionEvent.ACTION_UP:
            //Toast.makeText(c, "UP", Toast.LENGTH_SHORT).show();
            break;
        }

        return false;
    }

});
于 2012-07-25T13:44:17.017 に答える
1

問題の簡単な解決策-一時的なfinal変数を使用します。

場合によっては(おそらくあなたのものではない)convertViewの参照がリスナースコープの外で変更される可能性があるため、問題が発生します。

よりAndroidに似たソリューション-可能であれば状態ドローアブルを使用-http ://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

于 2012-07-25T13:45:33.383 に答える
0

使ってみませんか

 yourList.setOnItemClickListener(new OnItemClickListener(){

     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

       ....
       view.setBackgroundColor(....);
       ....

     }
 }); 
于 2012-07-25T13:52:15.440 に答える