0

特定のボタンをクリックしたときにボタンの画像を変更し、他のすべてのボタンを削除したいのですが、助けてください。

これは私のコードです

public void onClick(View view) {
    Object tag = ((Button) view).getTag();

    System.out.println("value o ftagagdsgsdg:::" +tag.toString());
    String strtag = tag.toString();
    System.out.println("value of strtag:::" +strtag);

    enablebutton = Integer.valueOf(tag.toString());

    System.out.println("value of enable buttons variable::" +enablebutton);
    DeselectButtons();

    ((Button)view).setEnabled(true);
    for(int a = 0;a<adapt_obj.city_id_array.length;a++){
        System.out.println("ddsgdgsdg::"+adapt_obj.city_code_array[a]);
        System.out.println("value o ftagagdsgsdg:inside for loop::" +tag.toString());

        if(tag.toString() == adapt_obj.city_code_array[a]){
            ((Button)view).setFocusable(true);
            //clicked = false;

            // Calling process to fetch the data of city 
            selectedcityidclicked(tag.toString(), view);
            ((Button)view).setSelected(true);

            /*Drawable dr = getResources().getDrawable(R.drawable.location_btn_active_1);// active
            Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
            // Scale it to 50 x 50
            // Set your new, scaled drawable "d"
            ((Button)view).setBackgroundDrawable(new BitmapDrawable(Bitmap.createScaledBitmap(bitmap, 10, 10, true)));*/
           // ((Button)view).invalidate();
        }
        else if(tag.toString() != adapt_obj.city_code_array[a]){

            /*((Button)view).setFocusable(true);
            selectedcityidclicked(tag.toString(), view);
            Drawable dr2 = getResources().getDrawable(R.drawable.location_btn_active_1);// inactive
            Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
            // Scale it to 50 x 50
            Drawable d2 = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap2, 10, 10, true));
            // Set your new, scaled drawable "d"
            ((Button)view).setBackgroundDrawable(d2);
            ((Button)view).invalidate();
            clicked = false;*/
        }
    }

    /*else if(tag.toString() != adapt_obj.city_code_array[a]){
         ((Button)view).setFocusable(true);
        Drawable dr2 = getResources().getDrawable(R.drawable.location_btn_inactive_1);//instead of inactive
        Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
        // Scale it to 50 x 50
        Drawable d2 = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap2, 10, 10, true));
        // Set your new, scaled drawable "d"
        ((Button)view).setBackgroundDrawable(d2);
        ((Button)view).invalidate();
    }
    else {
        Drawable dr2 = getResources().getDrawable(R.drawable.location_btn_active_1);//white
        Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
        // Scale it to 50 x 50
        Drawable d2 = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap2, 10, 10, true));
        // Set your new, scaled drawable "d"
        ((Button)view).setBackgroundDrawable(d2);
        ((Button)view).invalidate();
    }*/

    /*((Button) view).setText("*");
    //selectedcityidclicked(tag.toString());
    ((Button) view).setEnabled(false);*/
}
private void DeselectButtons() {
    // TODO Auto-generated method stub
    for(int x=0; x<adapt_obj.city_code_array.length;x++){ 
        System.out.println("value of enable tag::" +enablebutton);
        System.out.println("valuie dofdsf xxx:::" +x);
        if (enablebutton!= x)
            //What should i do here as i had to take the un clicked button as set selected as false //
            // ((Button)view).setSelected(false);
            //this.findViewById(i).setSelected(false);
            //this.findViewById(i).setSelected(false);
    }
}
private void selectedcityidclicked(String cityval, View view) {
     cityidvalue = "&city_code="+cityval;
     System.out.println("value of cityidvalue::" +cityidvalue);

     new MyAsyncTask(view).execute();
}
4

2 に答える 2

1

このセレクターをボタンのドローアブルとして使用すると、クリックするか選択したときにドローアブルが変更されます。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@drawable/home_hover"></item>
    <item android:state_selected="true" android:drawable="@drawable/home_selected"></item>
    <item android:drawable="@drawable/home"></item>
</selector>

他のボタンを選択解除するには、それらをループする必要があります。たとえば、子を介してその相対レイアウト ループの参照をフェッチし、タグを確認した後よりも、すべてのボタンをリニアまたは相対レイアウトに配置します。それらがボタンのタグと等しい場合は、そのボタンに setSelected(false) を呼び出すよりも選択を解除します。

private void DeselectButtons() {
    LinearLayout layout = findViewById(R.id.parent_ofbuttons);
    for(int i=0; i<layout.getChildCount(); i++) {
         Button btn = (Button)layout.getChildAt(i);  
         if(btn.getTag().toString().equals("100")) {
              btn.setSelected(false);
         }
    }
}
于 2012-04-18T09:27:58.160 に答える
0

通常はxmlであるセレクターxmlを作成します

そこに Android:state_pressedpressed="true" と Android:state_pressed="false" の画像を設定します

my_button_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed_image"></item>
    <item android:state_pressed="false" android:drawable="@drawable/button_normal_image"></item>
</selector>

次に、このファイルをドローアブルに保存し、ボタンの背景をこのファイルに設定します

なのでmyButton.setBackgroundResourceId(R.drawable.my_button_background);

------------------------------

編集済み

button1.setOnClickListener(this);
button2.setOnClickListener(this);

今あなたのオーバーライドでonCLICK

@Override
OnClick(View v)
{
   if(v.getId() == R.id.button1_id)
   {
      button1.setBackgroundResource(R.drawable.anyImage1);
      button2.setBackgroundResource(R.drawable.anyImage2);
   }
   else
   {
 if(v.getId() == R.id.button1_id)
   {
      button1.setBackgroundResource(R.drawable.anyImage2);
      button2.setBackgroundResource(R.drawable.anyImage1);
   }
   }
}

button1 と button2 メンバー変数を宣言することを忘れないでください

于 2012-04-18T09:38:49.200 に答える