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.

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.

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: ¿Cómo puedo comprobar un elemento en particular en CheckView ListView?
  • El contenido del adaptador ha cambiado pero ListView no recibió una notificación - Con AsyncTask
  • Enlaces y texto en el elemento de vista de lista
  • Android: ListView con botones -> OnItemClick no hacer nada
  • ¿Cómo superponer el color del texto del elemento de la lista en una región específica?
  • ¿Cómo diferenciar entre un fling y un toque?
  • Problema de fondo de ListView personalizado
  • Función de parada que llama en pestañas
  • Android: el método i (String, String) no está definido para el tipo Log
  • Cómo tachar los elementos de texto en listview cuando está marcada?
  • ViewHolders para ListViews con diferentes diseños de elementos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.