Android cómo utilizar el adaptador para listView sin extender listaActividad
Tengo una aplicación con pestañas. En una pestaña necesito poner datos (cadenas) en filas. Para ello he elegido tableLayout
pero cuando quería usar un contextmenu
en sus filas no funciona.
Puedo mostrar el contextmenu
onLongClick
pero el problema es que no puedo obtener la información sobre la fila seleccionada para editar o eliminar la fila seleccionada. Entonces leí en una discusión que usar listView
es mejor que tablelayout
si tenemos muchas filas. Pero los ejemplos que vi ampliar listactivity
pero no quiero hacer esto.
- El selector de Android para el elemento seleccionado no funciona
- Android: Efecto de parpadeo ListView. ¿Algún consejo sobre cómo deshacerse de esto?
- Cómo actualizar el contenido de una sola fila en mi ListView utilizando OnItemClick
- Cómo configurar el texto en el centro en la aplicación ListView android?
- Resaltar texto buscado en elementos ListView
Así que cuando intento trabajar en un listView
sin extender listactivity
no sé cómo hacerlo lo que quiero decir es que nunca he utilizado listView
antes, así que intento diferentes ejemplos que encontré en Internet para entenderlo, pero no funciona. Esto es lo que hice hasta ahora para la listView
:
String [] items=getRessources().getStringArray(R.arra.resolution); //Resolution is an array of strings ListView lv=(ListeView) findViewById(R.id.listView); v.setAdapter(new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1, items);
Cuando lo compile, obtengo una lista con elementos de mi matriz en ella, pero primero, quiero cambiar el color del texto que no puedo. Y en segundo lugar quiero añadir filas dinámicamente a la lista que no sé cómo hacer tampoco. Creo que tengo que usar un adapter
para hacerlo, pero no sé cómo. ¿Puede alguien por favor guíame a través de esto. Solo quiero saber cómo adjuntar mi lista a un adapter
que me permita añadir dinámicamente filas, agregar contextMenu
etc.
- AutoLink con evento onClick
- Cambiar las teclas de función de fondo de negro a transparente en la aplicación android
- Cómo cambiar la altura del divisor de listview dinámicamente?
- El fondo Listview es gris en Droid 3
- ¿Se desvanece en la parte inferior de una lista desplazable en Android?
- La vista de lista de Android ya no resalta la selección onclick
- ¿Lista de múltiples opciones con vista personalizada?
- Fuente personalizada en android ListView
Principal Clase de actividad:
import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; public class SelectedActivity extends Activity { private SelectedAdapter selectedAdapter; private ArrayList<String> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.selected_example); // populate the model - a simple a list list = new ArrayList<String>(); list.add("Apple"); list.add("Orange"); list.add("Grape"); list.add("Grape1"); list.add("Grape2"); list.add("Grape3"); list.add("Grape4"); list.add("Grape5"); list.add("Grape6"); // create our SelectedAdapter selectedAdapter = new SelectedAdapter(this,0,list); selectedAdapter.setNotifyOnChange(true); ListView listview = (ListView) findViewById(R.id.listExample); listview.setAdapter(selectedAdapter); listview.setOnItemClickListener(new OnItemClickListener() { //@Override public void onItemClick(AdapterView arg0, View view, int position, long id) { // user clicked a list item, make it "selected" selectedAdapter.setSelectedPosition(position); } }); }
Clase del adaptador:
import java.util.List; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.TextView; public class SelectedAdapter extends ArrayAdapter{ // used to keep selected position in ListView private int selectedPos = -1; // init value for not-selected public SelectedAdapter(Context context, int textViewResourceId, List objects) { super(context, textViewResourceId, objects); } public void setSelectedPosition(int pos){ selectedPos = pos; // inform the view of this change notifyDataSetChanged(); } public int getSelectedPosition(){ return selectedPos; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; // only inflate the view if it's null // if (v == null) { LayoutInflater vi = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.selected_row, null); // } // get text view TextView label = (TextView)v.findViewById(R.id.txtExample); Button btn=(Button)v.findViewById(R.id.btn1); // change the row color based on selected state if(selectedPos == position){ label.setBackgroundColor(Color.CYAN); btn.setBackgroundResource(R.drawable.next); } else{ label.setBackgroundColor(Color.WHITE); } label.setText(this.getItem(position).toString()); return(v); } }
Main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg8" android:id="@+id/RootView" > <LinearLayout android:id="@+id/myLayout" android:layout_width="wrap_content" android:layout_height="fill_parent"> </LinearLayout> </LinearLayout>
Es necesario definir un xml que se utilizará para almacenar datos de cada fila:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> <TableRow android:id="@+id/tableRow1" android:layout_width="793dp" android:layout_height="wrap_content" android:layout_weight="0.23" > <TextView android:id="@+id/col1" android:layout_height="fill_parent" android:layout_width="wrap_content" android:width="50dp" android:textSize="18sp" /> <TextView android:id="@+id/col2" android:layout_height="fill_parent" android:layout_width="wrap_content" android:width="150dp" android:textSize="18sp" /> <ImageView android:id="@+id/editimage" android:background="@drawable/edit" android:clickable="true" android:onClick="ClickHandlerForEditImage" android:layout_width="35dp" android:layout_height="35dp"/> </TableRow> </LinearLayout>
En el anterior xml también he incluido el ImageView, no es realmente necesario, pero esto es sólo para actualizar que podemos incluir los otros controles también.
& En el último usted debe tener una función en su clase relacionada:
private void LoadData() { DBAdapter db = new DBAdapter(this); db.open(); Cursor cur = db.GetData(); private ListView lv = (ListView)findViewById(R.id.myLayout); lv.setAdapter(null); if(cur.moveToFirst()) { String[] from = new String[] {"_id","column1"}; int[] to = new int[] {R.id.col1, R.id.col2}; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.grid_item, cur, from, to); lv.setAdapter(adapter); } db.close(); } }
Parece que nadie le ha contestado pregunta contextMenu. Para obtener un menú contextual para trabajar con su lista, después de llamar ListView yourList = getListView();
Debe llamar a registerForContextMenu(yourList);
Y para manejar la creación del menú debe implementar el método
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(context, v,menuInfo); MenuInflater inflater = getMenuInflater(); menu.setHeaderTitle("YOUR TITLE"); menu.setHeaderIcon(R.drawable.YOUR DRAWABLE); inflater.inflate(R.menu.YOUR_MENU_RESOURCE, menu); }
A continuación, puede responder a los clics mediante la implantación del método
@Override public boolean onContextItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.YOUR_MENU_ITEM: // do stuff if the item is selected return true; case R.id.YOUR_MENU_ITEM: // do stuff if the item is selected return true; case R.id.YOUR_MENU_ITEM: // do stuff if the item is selected return true; } return false; // nothing selected }
- Android Threading: Esta clase de Handler debe ser estática o pueden producirse fugas
- Error al ejecutar sbt install-emulator