J'ai une liste de réception. Lorsqu'un élément de la liste de liste est taraudé, il charge une sous-vision. Je souhaite attribuer un ID à chaque ligne de la liste de lecture, afin que je puisse transmettre cet identifiant à la sous-vision. Comment attribuer une carte d'identité spécifique à chaque ligne de la liste de listeView?
Voici comment je charge actuellement la liste de liste: p>
4 Réponses :
hi chris Vous avez déjà l'ID de position dans votre liste de réception, implémentez la fonction OnlistitemClick ().
v.setTag("myownID"+position);
J'aimerais pouvoir attribuer un ID à chaque poste dans la liste de liste. Je ne veux pas la valeur attribuée automatiquement.
Vous ne pouvez pas faire cela avec une standard ArrayAdapter vous Besoin d'étendre le tableau et écrase le getItemid () < / a> méthode et peut-être aussi le hasStableIDS () < / a> méthode. p>
Vous devez ensuite revenir en vrais dans la méthode HASSTADIDS et générer votre ID pour l'élément à la position donnée à votre méthode getItemid. P>
Voici comment j'ai résolu le problème. J'ai obtenu les employés_ids et les noms d'employé à partir de la base de données locale SQLite, puis j'ai créé une arrayliste d'EmployeenamesArray et une arrayliste d'employéAnierArray en même temps. Ainsi, l'employéAnierArray [0] correspondrait à EmployeeAnarray [0], employéAdraRray [1] correspondrait à l'EmployeeAmamearray [1], etc.
Une fois que les arraylistes ont été créés, j'ai nourri à EmporteenArray dans la liste de réception. P>
Plus tard, à OnListitemCllick, je reçois la position de la ligne ListView sélectionnée. Cette "position" corresponde à la position dans les arraylistes - ainsi, si je sélectionne la première ligne de la liste de listeView, la position sera nulle et Emporteenamarray [0] correspond à EmployéAdraRay [0]. Je saisis l'entrée de corolotation d'employéAdray et appuyez sur cela à la prochaine activité en utilisant Putextra. P>
public class MyFirstDatabase extends ListActivity { ArrayList<String> employeeIdArray = new ArrayList<String>(); // List of EmployeeIDs /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Open the database SQLiteDatabase db; db = openOrCreateDatabase("mydb.db",SQLiteDatabase.CREATE_IF_NECESSARY, null); db.setVersion(1); db.setLocale(Locale.getDefault()); db.setLockingEnabled(true); // Query the database Cursor cur = db.query("employee", null, null, null, null, null, "employee_lastname"); cur.moveToFirst(); // move to the begin of the db results ArrayList<String> employeeNameArray = new ArrayList<String>(); // Initialize mArrayList while (cur.isAfterLast() == false) { employeeNameArray.add(cur.getString(1)); // add the employee name to the nameArray employeeIdArray.add(cur.getString(0)); // add the employee id to the idArray cur.moveToNext(); // move to the next result set in the cursor } cur.close(); // close the cursor // put the nameArray into the ListView setListAdapter(new ArrayAdapter<String>(this,R.layout.list_item,employeeNameArray)); ListView lv = getListView(); lv.setTextFilterEnabled(true); } protected void onListItemClick(ListView l, View v, final int position, long id) { super.onListItemClick(l, v, position, id); Intent myIntent = new Intent(this, SubView.class); // when a row is tapped, load SubView.class Integer selectionID = Integer.parseInt(employeeIdArray.get(position)); // get the value from employeIdArray which corrosponds to the 'position' of the selected row myIntent.putExtra("RowID", selectionID); // add selectionID to the Intent startActivityForResult(myIntent, 0); // display SubView.class } }
Si j'ai un filtre activé, le premier résultat produira toujours la position 0 ... de sorte que ce n'est donc pas la bonne façon de le faire
Après avoir passé des heures à ce sujet, cette solution la plus simple que j'ai trouvée était de remplacer Bindview de l'adaptateur et de définir une valeur de balise contenant la ligne _id sur l'élément - dans mon cas, il s'agissait d'un bouton de la ligne ListView.
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.note, cursor, fromColumns, toViews, 0) { @Override // add the _id field value to the button's tag public void bindView(View view, Context context, Cursor cursor) { super.bindView(view, context, cursor); Integer index = cursor.getColumnIndex("_id"); Integer row_id = cursor.getInt(index); Button button = (Button) view.findViewById(R.id.button_delete_record); button.setTag(row_id); } };