Использование ArrayAdapter позволяет передавать только один элемент, поэтому, если вы не прибегаете к сложным / грязным / неэффективным методам, ArrayAdapter действительно действительно подходит только для одного значения.
Вы можете использовать ArrayList, где your_object имеет члены для всех необходимых значений. т.е. номер телефона и имя телефона. Отмечая, что если вы не используете пользовательский адаптер, вы должны переопределить метод toString для извлечения данных, которые вы хотите отобразить, как это то, что использует стандартный ArrayAdapter.
Альтернативой может быть использование адаптера курсора (например, SimpleCursorAdapter), затем вы можете вернуть курсор и использовать его напрямую. Тем не менее, CursorAdapter ТРЕБУЕТ столбца с конкретным именем _id (можно использовать BaseColumns._ID).
Одним из явных преимуществ адаптера Cursor является то, что 4-й паремметр, передаваемый onItemClick / onItemLongClick, представляет собой id строки (если используется правильно), позволяющий затем получить одно значение / обновить / удалить / пропустить соответствующую выбранную строку.
Вы можете подумать, что у меня нет такой колонки. Однако вы можете использовать обычно скрытый столбец rowid и динамически создавать столбец с именем _id.
У вас может быть метод в помощнике по базе данных (DataDBAdapter), такой как: -
public Cursor getAllRowsAsCursor()
{
String[] columns = new String[]{"rowid AS " + BaseColumns._ID,"*"}
return = mDB.query(TBL_MYTABLE,null,null,null,null,null,null)
}
Тогда метод ManageList может быть: -
private void manageListView(Context context) {
myCursor = dbhelper.getAllRowsAsCursor();
// Only setup the adapter and the ListView if the adapter hasn't been setup
if(arrayAdapter == null)
{
// Instantiate the adapter
arrayAdapter = new SimpleCursorAdapter(context,android.R.layout.simple_list_item_1,myCursor,new String[]{DataAdapter.COl_MYTABLE_PHONENAME},newint[]{android.R.id.text1},0);
display_contacts1.setAdapter(arrayAdapter); //<<<<<<<<<< Tie the adpater to the ListView
// Set the ListViews OnItemClick Listener
display_contacts1.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
String namedisplay = arrayAdapter.getItem(position); //<<<<<<<<<< this gets the phone name
String phonenumber = myCursor,getString(myCursor.getColumnIndex(DataAdapter.COL_MYTABLE_PHONENUMBER);
Toast.makeText(view.getContext(), namedisplay + " Selected for Communication", Toast.LENGTH_SHORT).show();
Toast.makeText(view.getContext(), phonenumber, Toast.LENGTH_SHORT).show();
}
});
} else {
arrayAdapter.swapCursor(myCursor);
}
Cursor MyCursor;
ArrayAdapter<String> arrayAdapter;
вы бы имели SimpleCursorAdapter arrayAdapter;
Ниже приведен код, основанный на коде из предыдущего вопроса (из которого, как представляется, следует). У этого есть два ListViews старый и новый, который использует SimpleCursorAdapter. При нажатии на элемент отображается номер телефона, а также идентификатор. Длительное нажатие на элемент удаляет этот элемент (обновляя оба ListViews).
DataDBAdapter.java имеет два новых метода (поэтому добавьте их): -
//<<<<<<<<<< ADDED
public Cursor getAllRowsAsCursor() {
return mDB.query(TBL_MYTABLE,null,null,null,null,null,null);
}
public int delete(long id) {
String whereclause = COL_MYTABLE_ID + "=?";
String[] whereargs = new String[]{String.valueOf(id)};
return mDB.delete(TBL_MYTABLE,whereclause,whereargs);
}
Теперь SelectModemFragment.java : -
[113 ]Поскольку Вам нужен jre для выполнения банки, я боюсь, что это не возможно.
Я когда-то использовал izpack вместе с launch4j для создания Windows EXE, который установил бы jre с моим приложением.
Поместите Java Portable в подкаталог и запустите jar-файл с помощью сценария batch / bash или Launch4j .