2012-06-30 28 views
6

Tengo un diseño de elemento ListView que está utilizando un HorizontalScrollView en el centro. He utilizado el atributo de Android "android:descendantFocusability="blocksDescendants"" en mi padre LinearLayout para que los elementos ListView todavía se puedan seleccionar.Desplazamiento horizontal ¿Vista interior del elemento ListView?

El problema que tengo es que al hacer clic en la parte del elemento ListView que es HorizontalScrollView, no se llama al evento de clic de elemento ListView.

¿Cómo puedo obtener el evento click del HorizontalScrollView para llamar al evento click ListView elemento de la lista?

+0

favor use try catch blog surroung listview haga clic en evento e imprima el error en el registro y publique su error aquí para que podamos saber qué está pasando mal. – Aamirkhan

+0

No tengo ningún error ... El problema tiene que ver con el comportamiento de las vistas, ya que están configuradas de esta manera. – startupsmith

+0

¿puede usted publicar su archivo xml que está usando como adatper personalizado? – Aamirkhan

Respuesta

1

HorizontalScrollView no tiene "onClick()", ver este http://developer.android.com/reference/android/widget/HorizontalScrollView.html

Es apoyar gestos y tienen "onTouchEvent (MotionEvent EV)"

para que pueda usar como clic . Ver la demostración siguiente que he preparado.

//  Followin code will not work for HorizontalScrollView 
     /*hsv1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(HorizontalListActivity.this, tvMiddle.getText().toString().trim(), Toast.LENGTH_SHORT).show(); 
      } 
     });*/ 

     hsv1.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       Toast.makeText(YourActivity.this, "Your Msg", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 
+0

¿Con onTouch el evento se dispara por cada toque? Todavía quiero ser capaz de desplazar el HorizontalScrollView. Solo en el caso en que el usuario haga clic/toque en HorizontalScrollView, quiero que actúe con el comportamiento de clic del elemento de lista normal. – startupsmith

+0

Perdón, no te estoy entendiendo correctamente. Si tienes tiempo, ¿puedes explicarme en detalle? –

0

Adición de variables booleanas touchdown y retoque a la clase de adaptador de la siguiente manera parece que funciona bastante bien:

private class MyListAdapter extends ArrayAdapter<MyObject>{ 
    ... 
    //touch down + touch up with no other motion events in between = click 
    boolean touchDown = false; 
    boolean touchUp = false; 
    private int iHostViewID; 
    ... 

    public MyListAdapter(Context context,int viewResourceId, List<MyObject> objects) { 
     super(context, textViewResourceId, objects); 
     iHostViewID = viewResourceId; 
    } 

    @Override 
    public View getView(int pos, View convertView, ViewGroup parent){ 
     View itemView = convertView; 

     //iff we cannot re-use a view 
     if(itemView == null){ 
      LayoutInflater inflater = (
      (LayoutInflater)hContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      itemView = inflater.inflate(iHostViewID, null); 
     } 

     final View hItemView = itemView; 
     final int hPosition = pos; 
     ... 
     final HorizontalScrollView textDataSV = 
     (HorizontalScrollView)itemView.findViewById(R.id.widget_hsv); 
     textDataSV.setOnTouchListener(new OnTouchListener(){ 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

        if(event.getAction() == MotionEvent.ACTION_DOWN){ 

         touchDown = true; 
        } 
        else if(event.getAction() == MotionEvent.ACTION_UP){ 

         touchUp = true; 
        } 

        else{ 

         touchDown = false; 
         touchUp = false; 
        } 

        if(touchDown && touchUp){ 
         //click 
         //mMyListView is the reference to the list view 
         //instantiated in the view controller class responsible 
         //for setting this adapter class as the list view's adapter 
         mMyListView.performItemClick(hItemView, hPosition, 
         hItemView.getId()); 
        } 



        return false; 
       } 
     }); 
    } 
} 

Está lejos de ser perfecta, pero debería funcionar para la mayoría de los casos de uso estándar

Cuestiones relacionadas