2010-11-17 36 views
9

En mi aplicación de Android, hay varias imágenes en la carpeta dibujable. En mi diseño, hay dos botones: Atrás y Siguiente. Al hacer clic en los botones Siguiente y Atrás, se cargan 2 imágenes diferentes en el mismo diseño (común para todas las imágenes).Cómo deshabilitar el botón, haga clic en?

Problema: Puedo cargar imágenes en el botón Siguiente/Atrás pero después de llegar a la última imagen, deseo hacer que mi botón Siguiente se deshabilite y lo mismo para el botón Atrás. Como el usuario está en la primera imagen el botón Atrás debe estar deshabilitado. Código es:

public class SequencerActivity extends Activity implements OnClickListener 
    { 
     private int imageCounter = 0; 
     private ImageView imageLoader; 

     private int[] imageList = {R.drawable.image_wo_lbl_0, R.drawable.image_wo_lbl_1, R.drawable.image_wo_lbl_2, R.drawable.image_wo_lbl_3, R.drawable.image_wo_lbl_4, R.drawable.image_wo_lbl_5, 
       R.drawable.image_wo_lbl_6, R.drawable.image_wo_lbl_8, R.drawable.image_wo_lbl_9,R.drawable.image_wo_lbl_10, R.drawable.image_wo_lbl_11}; 
     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      setContentView(R.layout.parent_frame);//this one is the common parent layout for all image views 
      super.onCreate(savedInstanceState); 

      /*requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN);*/ 

      //int image1 = R.drawable.image_w_lbl_0; 

      imageLoader = (ImageView) findViewById(R.id.imageLoader); 
      //imageLoader.setImageResource(image1); 

      ImageButton next = (ImageButton) findViewById(R.id.next); 
      ImageButton back = (ImageButton) findViewById(R.id.back); 
      next.setOnClickListener(this); 
      back.setOnClickListener(this); 
      //show the default image 
      this.loadImage(imageList[imageCounter]); 

     } 
     @Override 
     public void onClick(View v) 
     { 
      int imagePath = 0; 
      // TODO Auto-generated method stub 
      switch (v.getId()) 
      { 
      case R.id.next: 
       Log.i("Tag","tag"); 
       if(imageCounter < imageList.length) 
       { 
        imageCounter++; 
        imagePath = imageList[imageCounter]; 
        if (imageCounter==(imageList.length)-1) 
        { 
         //how to make my next button disable 

        } 
       } 
       break; 
      case R.id.back: 
       if(imageCounter > 0) 
       { 
        imageCounter--; 
        imagePath = imageList[imageCounter]; 
        if (imageCounter==0) 
        { 
         //how to make my back button disable 
        } 
       } 
       break; 
      } 
      this.loadImage(imagePath); 

     } 

     private void loadImage(int imagePath) 
     { 
      imageLoader.setImageResource(imagePath); 

     } 
    } 

Respuesta

14
case R.id.next: 
     Log.i("Tag","tag"); 
     if(imageCounter < imageList.length) 
     { 
      imageCounter++; 
      imagePath = imageList[imageCounter]; 
      if (imageCounter==(imageList.length)-1) 
      { 
       ImageButton next=(ImageButton)findViewBYId(R.id.next); 
       next.setEnabled(false); 
      } 
     } 
     break; 
    case R.id.back: 
     if(imageCounter > 0) 
     { 
      imageCounter--; 
      imagePath = imageList[imageCounter]; 
      if (imageCounter==0) 
      { 
       ImageButton back=(ImageButton)findViewBYId(r.id.back); 
       back.setEnabled(false); 
      } 
     } 
     break; 
+0

¡funcionó! y ahora la aplicación se ejecuta en smotly – Alok

+0

kkkkkkkk 'nice ...... – viv

+2

¿No deberían volver a habilitarse los botones en algún momento? – jul

8
next.setClickable(false); 
+0

He intentado ur código pero hay un error como: no se puede invocar a setClickale (boolean) en el tipo primitivo int. – Alok

+0

Eso es extraño, la función requiere booleano. mira esto: http://developer.android.com/reference/android/view/View.html. También puede usar Next.setEnabled (false) para la funcionalidad requerida. –

+0

de hecho, o bien tengo que declarar a continuación como privado como la variable de clase o bien tengo que tomar una nueva instancia de atrás y la siguiente en caso. Usted puede ver en viv respuesta que ha creado una nueva instancia. Ahora la aplicación sigue funcionando sin problemas. y estoy por incluir algunas funcionalidades nuevas. Gracias – Alok

0

basta con insertar dos imágenes adicionales en la carpeta de dibujable una flecha para discapacitados derecha y una para discapacitados flecha izquierda.

ahora probar este

  case R.id.next: 

     Log.i("Tag","tag"); 

      if(imageCounter < imageList.length) 


      { 
       imageCounter++; 

       imagePath = imageList[imageCounter]; 

       if (imageCounter==(imageList.length)-1) 

       { 


         //disabling right button by changing image from following code                             

         next.setImageDrawable(getResources().getDrawable(R.drawable.right_disabled)); 

       } 
      } 
      break; 
     case R.id.back: 

      if(imageCounter > 0) 

      { 
       imageCounter--; 

       imagePath = imageList[imageCounter]; 

       if (imageCounter==0) 

       { 
         back.setImageDrawable(getResources().getDrawable(R.drawable.left_disabled)); 
       } 
      } 
      break; 
4

solución más preferida es,

onclick(){ 
    btn.setEnabled(false); 
    btn.setClickable(false); 
    //yourwork 
    myWork(); 
} 

myWork(){ 
//your tasks. 
btn.setEnabled(true); 
btn.setClickable(true); 
} 

Como un enlace se puede ignorar fácilmente, tuve que repetir una y otra vez

Cuestiones relacionadas