1

リストビューがあり、1つのImageView、2つのTextView、および1つのボタンを含むカスタムレイアウトでそれを膨らませています。リストビューアイテムをクリックしたときにボタンの背景を変更したいのですが、実行できません。誰か助けてもらえますか?よろしくお願いします。

ここに画像の説明を入力してください

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クラスでそれを行うにはどうすればよいですか?

4

3 に答える 3

2

わかりました。基本的に、それを実現するための状態リストが必要です。作成方法については、これを参照してください。次に、ボタンの背景として設定してください。

于 2012-04-20T10:21:34.657 に答える
1

基本クラスとして使用する場合、自分でListActivity作成する必要はありませんonItemClickListener。すでに存在しています。オーバーライドするだけprotected void onListItemClick(ListView l, View v, int position, long id)です。内部では、IDを介してボタンを取得できます。

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
}
于 2012-04-20T10:20:13.107 に答える
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(...)
        }
   });
)
于 2012-04-20T10:31:15.633 に答える