Tengo un ArrayList de Botones donde mi OCL necesita saber que el índice I ha sido presionado.
El plan es algo como esto:

MyOnClickListener onClickListener = new MyOnClickListener() {

        @Override
        public void onClick(View v) {

            Intent returnIntent = new Intent();
            returnIntent.putExtra("deleteAtIndex",idx);
            setResult(RESULT_OK, returnIntent);
            finish();

        }
    };
    for (int i =0;i<buttonList.size();i++) {
        buttonList.get(i).setText("Remove");
        buttonList.get(i).setOnClickListener(onClickListener);
    }

¿Cómo la implementación de mi OCL necesidad de buscar como ?

Actualmente tengo este:

public class MyOnClickListener implements OnClickListener{

int index;

public MyOnClickListener(int index)
{
    this.index = index;
}

@Override
public void onClick(View arg0) {


}

}

Sin embargo, estoy seguro de lo que tengo que hacer dentro del constructor de mi OCL, así como la modicar onClick función.

¿quieres pasar los datos a MyOnClickListener de bucle for?
Sí, el índice.
cambiar su bucle for y crear nuevos ObjectEverytime y pasar el índice en cunstructor.

OriginalEl autor Adrian Jandl | 2013-03-05

4 Comentarios

  1. 7

    conjunto setOnClickListener de los botones como :

    buttonList.get(i).setOnClickListener(new MyOnClickListener(i));

    EDICIÓN :

    Necesito terminar una actividad en myOCL, ¿cómo puedo hacer eso?

    para el acabado de la Actividad en el Botón haga Clic en de la no Actividad de la clase tendrá que pasar Actividad de Contexto a la costumbre OnClickListener como :

    buttonList.get(i).setOnClickListener(new MyOnClickListener(i, Your_Current_Activity.this));

    y cambiar el Constructor de su costumbre OnClickListener clase a :

    int index;
    Context context; 
    public MyOnClickListener(int index,Context context)
    {
        this.index = index;
        this.context=context;
    }
    
    @Override
    public void onClick(View arg0) {
    
        //now finish Activity as\
        context.finish();
          // OR
            //((Activity)context).finish();
    }
    Oh, entiendo. Dicen que necesito para terminar una actividad en myOCL, ¿cómo puedo hacer eso? public class MyOnClickListener extends Activity implements OnClickListener { ` setResult(de la Actividad.RESULT_OK, returnIntent); finish(); `
    pasar de la Actividad de Contexto También el Botón de constructor
    véase mi edición de respuesta
    Yo no puedo llamar a la «actividad» de las funciones de contexto? context.finish(); me da un error del compilador.
    véase mi edición de respuesta

    OriginalEl autor ρяσѕρєя K

  2. 2

    cambiar su bucle for y crear un Objeto nuevo cada vez y pasar el índice en el constructor.

    for (int i =0;i<buttonList.size();i++) {
            buttonList.get(i).setText("Remove");
            buttonList.get(i).setOnClickListener(new MyOnClickListener(i));
    
    }

    Usted puede obtener el índice en el Método onClick.

    OriginalEl autor Rais Alam

  3. 2
    View.OnClickListener myListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("Button",v.getText().tostring);
        }
    });

    obtendrá su valor de botón en la vista de modo que, usted va a encontrar que el índice es.

    OriginalEl autor NovusMobile

  4. 0

    No estoy seguro de que esto se aplica específicamente a su caso, pero yo tenía el deseo de crear una escucha personalizada para hacer clic en elementos para evitar que se hace clic dos veces (si el usuario pulsa rápidamente).

    Mi solución fue crear una clase de escucha que me pase una costumbre Ejecutable y, a continuación, controlar que los Ejecutables si el botón se hace clic en el primer tiempo, pero obviamente puede pasar cualquier comportamiento personalizado, este es sólo un ejemplo muy simple de cómo usarlo…

    import android.content.Context;
    import android.os.Handler;
    import android.util.Log;
    import android.view.View;
    
    
    
    public class MyCustomOnClickListener implements View.OnClickListener {
        public static final String TAG = MyCustomOnClickListener.class.getSimpleName();
        private Runnable doOnClick;
        private Context mContext;
        private int isClicked = 0;
        public MyCustomOnClickListener(Context c, Runnable doOnClick) throws Exception{
            if(!(c instanceof Context) || !(doOnClick instanceof Runnable))
                throw new Exception("MyCustomOnClickListener needs to be invoked with Context and Runnable params");
            this.doOnClick = doOnClick;
            this.mContext = c;
        }
    
        @Override
        public void onClick(View view) {
            Log.v(TAG,"onClick() - detected");
            if(isClicked++ > 0)return; //this prevents multiple clicks
            Log.d(TAG, String.format("onClick() - being processed. View.Tag = \"%s\"", view.getTag().toString()));
            new Handler(mContext.getMainLooper()).post(doOnClick);
        }
    }

    y, a continuación, utilizarlo (suponiendo que usted está en una Actividad para la this contexto)…

    try{
       Button aButton = findViewById(R.id.someButton);
       aButton.setOnClickListener(new MyCustomOnClickListener(/*context*/this, new Runnable(){
      public void run(){
        //here you would put whatever you would have otherwise put in the onClick handler. If you need the View that's being clicked you can replace the Runnable with a custom Runnable that passes the view along 
      }
    }));
    }catch(...){
    
    }

    OriginalEl autor Genia S.

Dejar respuesta

Please enter your comment!
Please enter your name here