Как можно упаковать исполняемую банку с портативным JRE?

Выпуск

Использование ArrayAdapter позволяет передавать только один элемент, поэтому, если вы не прибегаете к сложным / грязным / неэффективным методам, ArrayAdapter действительно действительно подходит только для одного значения.

Исправить

Вы можете использовать ArrayList, где your_object имеет члены для всех необходимых значений. т.е. номер телефона и имя телефона. Отмечая, что если вы не используете пользовательский адаптер, вы должны переопределить метод toString для извлечения данных, которые вы хотите отобразить, как это то, что использует стандартный ArrayAdapter.

Альтернатива (используйте CursorAdapter)

Альтернативой может быть использование адаптера курсора (например, SimpleCursorAdapter), затем вы можете вернуть курсор и использовать его напрямую. Тем не менее, CursorAdapter ТРЕБУЕТ столбца с конкретным именем _id (можно использовать BaseColumns._ID).

Одним из явных преимуществ адаптера Cursor является то, что 4-й паремметр, передаваемый onItemClick / onItemLongClick, представляет собой id строки (если используется правильно), позволяющий затем получить одно значение / обновить / удалить / пропустить соответствующую выбранную строку.

  • Как таковой, я бы порекомендовал адаптер курсора для ListView и, следовательно, более полный ответ.

Вы можете подумать, что у меня нет такой колонки. Однако вы можете использовать обычно скрытый столбец 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);
    }

Notes

  • MyCursor будет объявлен как переменная класса, например Cursor MyCursor;
  • Instaed из
    • ArrayAdapter<String> arrayAdapter; вы бы имели
    • SimpleCursorAdapter arrayAdapter;
  • Вышесказанное является принципиальным кодом и не было проверено, поэтому возможны ошибки и / или упущения. [1118]

Рабочий пример

Ниже приведен код, основанный на коде из предыдущего вопроса (из которого, как представляется, следует). У этого есть два 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 ]
11
задан Penchant 20 March 2009 в 03:16
поделиться

2 ответа

Поскольку Вам нужен jre для выполнения банки, я боюсь, что это не возможно.

Я когда-то использовал izpack вместе с launch4j для создания Windows EXE, который установил бы jre с моим приложением.

1
ответ дан 3 December 2019 в 11:04
поделиться

Поместите Java Portable в подкаталог и запустите jar-файл с помощью сценария batch / bash или Launch4j .

6
ответ дан 3 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: