2012-04-20 12 views
1

私はリストビューを持っており、1つのImageView、2つのTextView、1つのボタンを含むカスタムレイアウトでそれを膨張させました。私はリストビューの項目をクリックするとボタンの背景を変更したいが、それを実行することはできない。誰か助けてくれますか?事前にありがとうございます。リストビュー項目をクリックしたときにボタンの背景を変更する方法

enter image description here

row_segnalibro.xml

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout01" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" android:layout_height="50dp" > 

<ImageView android:id="@+id/ImageView01" android:src="@drawable/star" 
android:layout_height="40dp" 
    android:layout_width="40dp" 
    android:enabled="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:clickable="false" 
    android:paddingLeft="10dp" /> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout02" 
    android:orientation="vertical" 
    android:layout_width="220dp" android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/tvRow1" 
    android:layout_width="220dp" 
    android:layout_height="wrap_content" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:clickable="false" 
    android:paddingLeft="10dp"  
    android:paddingTop="5dp" 
    android:textColor="#0967AD" 
    android:textStyle="bold" 
    /> 
<TextView 
    android:id="@+id/tvRow2" 
    android:layout_below="@id/tvRow1" 
    android:layout_width="220dp" 
    android:layout_height="wrap_content" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:clickable="false" 
    android:paddingLeft="10dp"  
    android:textColor="#0967AD" 
    android:textStyle="bold" 
/> 
</RelativeLayout> 
<Button 
    android:id="@+id/butt_segnalib" 
    android:background="@drawable/freccia_o" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:layout_width="20dp" 
    android:layout_height="20dp" 
    android:layout_gravity="center" /> 

Segnalibro.java

public class Segnalibro extends ListActivity{ 
      super.onCreate(savedInstanceState); 
     setContentView(R.layout.segnalibro); 

     lv = (ListView) getListView();   
.....some code 
     MySimpleCursorAdap myadap = new MySimpleCursorAdap(getApplicationContext(),R.layout.rowlayout_segnalibro,curr,campi, to); 
     lv.setAdapter(myadap); 
     lv.setClickable(true); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v,int position, long arg3) { 
        Log.i("","I have clicked on item "+position); 

      }   
     }); 

MySimpleCursorAdap.java

 public class MySimpleCursorAdap extends SimpleCursorAdapter{ 

     public MySimpleCursorAdap(Context context, int layout, Cursor c, String[] from, int[] to) { 
      super(context, layout, c, from, to); 
     this.mLayout = layout; 
     this.curr = c; 
       this.cont = context; 
      } 

public void bindView(View view, Context context, final Cursor cursor) { 

    ....some code 

/*  Button butt = (Button) view.findViewById(R.id.butt_segnalib); 
      butt.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
    .....code to change the background 
    } 
     }); */ 
    } 

MySimpleCursorAdapでメソッドのfindViewByIdでButtonを取得できます。クラスSegnalibroでどのように行うことができますか?

+0

さ** freccia_o **は、状態リストですか..? – ngesh

+0

freccia_oはpng画像です – sleone08

答えて

2

[OK]を..あなたがそれをacheivingための状態リストを必要とするので、基本的に.. .. ..それを作成する方法を知っていると、あなたのボタンの背景として設定するthisを参照してください

+0

大変ありがとうございます、私はサインパインターのソリューションを使用しました。おそらく私は好奇心にあなたの解決策を試してみます:) – sleone08

+1

@crazykeyboard ..それは動作するかもしれません。あなたがクリックされるたびに実行時にボタンイメージを変更し続けることがないので、状態リストを使用することが好ましいです... – ngesh

+0

あなたのアドバイス、私は今理解しています。私はそれを使用しようとします。素敵な一日を); – sleone08

1

ListActivityを基本クラスとして使用する場合は、自分でonItemClickListenerを作成する必要はありませんが、既にそれがあります。ただprotected void onListItemClick(ListView l, View v, int position, long id)を上書きしてください。内部では、そのIDを介してButtonを取得できます。

http://developer.android.com/reference/android/app/ListActivity.html

protected void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Button bt = (Button) v.findViewById(R.id.button); 

    //do something fancy with the button 
} 
+0

ありがとうございます、あなたは私の一日をとても幸せにしました。素晴らしい一日を過ごしてください:) – sleone08

+1

@crazykeyboardボタンの背景を状態の変化(押した、フォーカスした、など)に変更したいだけなら、私は砂の解決策を使用します。そうすれば、あなたは一箇所にいて、他のアクティビティのボタンの効果を簡単に再利用できます。 – signpainter

1

bindView方法でリスト項目ビューのClickListenerを追加しよう:

public void bindView(View view, Context context, final Cursor cursor) { 

    //some code 

    view.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final ImageButton button = (ImageButton)v.findViewById(R.id.list_item_button); 
     button.setBackgroundColor(...) 
     } 
    }); 
) 
関連する問題