studio radiogroup example cardview card android onclick rating

android - radiogroup - RatingBar onClick



cardview clickable (5)

Andrew, puedes intentar usar otro evento disponible para RatingBar , OnRatingBarChangeListener . Mira este ejemplo, funciona para mí!

ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { viewMarketDetails(mContext); dialog.dismiss(); } });

Por lo tanto, no es necesario utilizar onClickEvent, pero tiene el mismo efecto, pero solo funciona, por supuesto, si cambia realmente el valor. (Si hace clic en el valor real, si no tiene efecto)

Tengo un ListView que utiliza diferentes archivos XML para crear vistas y crear elementos a partir de. Uno de estos archivos XML contiene un RatingBar. Todo se muestra y se ve excelente.

Estoy intentando adjuntar un controlador onClick a RatingBar para iniciar una nueva actividad. Mi RatingBar es de estilo? Android: attr / ratingBarStyleSmall; así que es solo un indicador (quiero que el pequeño RatingBar haga clic para llevar al usuario a una Actividad donde pueda realizar varias clasificaciones)

Mi problema es que el controlador onClick para RatingBar nunca se ejecuta. Lo que lo hace más interesante es que he usado el mismo código para hacer clic en LinearLayout y funciona bien. ¿Alguien podría decirme por qué?

El getView de mi adaptador se ve como tal:

@Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); // get the View for this list item View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); switch (type) { // ... case TYPE_LOOKUP: v = vi.inflate(R.layout.layout_itemlist_itemlookup, parent, false); LinearLayout vLookup = (LinearLayout)v.findViewById(R.id.itemlist_lookup); if (vStore != null) { vStore.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // THIS HANDLER WORKS FINE Intent intentLaunchLookup = new Intent(ActivityItemList.this, ActivityLookup.class); startActivity(intentLaunchLookup); } }); } break; case TYPE_SEPARATOR: v = vi.inflate(R.layout.layout_itemlist_itemseparator, parent, false); RatingBar r = (RatingBar)v.findViewById(R.id.itemlist_rating); if (r != null) { r.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // THIS HANDLER DOES NOT GET EXECUTED (r IS NOT NULL; SO THIS SHOULD HAVE BEEN CREATED) Intent intentLaunchRating = new Intent(ActivityItemList.this, ActivityRating.class); startActivity(intentLaunchRating); } }); } break; // ... } } // … // return the created view return v; }


En un ListView, generalmente tiene que decidir si desea que se pueda hacer clic en los elementos de la vista de lista, o en un elemento contenido dentro de la vista de lista. ¿R.isClickable () devuelve true?

Es posible que tenga una mejor configuración de suerte que se pueda hacer clic en falso en la Barra de clasificación y, en su lugar, utilice onClickListener de listView para tratar los eventos de clic en la fila listView.


He resuelto este problema envolviendo RatingBar en un LinearLayout y adjuntando un oyente onClick al LinearLayout. No me gusta hacer esto, pero funciona. Por alguna razón misteriosa, onClick no se ejecutará para un RatingBar.


La razón por la que setOnClickListener() no funciona es que RatingBar reemplaza a onTouchEvent() (en realidad su súper clase, AbsSeekBar , sí) y nunca deja que View se encargue de ello, por lo que View#performClick() nunca se llama (lo que habría llamado OnClickListener ).

Dos soluciones posibles:

    derivar de RatingBar y anular onTouchEvent()
    usa OnTouchListener en OnTouchListener lugar, así:

    ratingBar.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { // TODO perform your action here } return true; }

HTH, Jonas


ratingBar1.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { String rateValue = String.valueOf(ratingbar1.getRating()); System.out.println("Rate for Module is"+rateValue); } });