Список Android не обновляется после нажатия кнопки сохранения - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть приложение, в котором я пытаюсь обновить список после нажатия кнопки «Сохранить».

Логика примерно такая: 1. получить список фруктов 2. на том же экране я могу отредактировать / добавить новое имя фруктов 3. если я решу добавить название фруктов, это принесет мне немногоФорма тегов, после ввода, я нажимаю на кнопку Сохранить.4. При нажатии кнопки «Сохранить» должно появиться действие, которое возвращает список фруктов (шаг 1).

public class firstActivity extends Activity{
private SQLiteDatabase db;
Button saveButton;
public void onCreate(Bundle savedInstance){
// some code here
saveButton = (Button) findViewById(R.id.savedata);
db = openOrCreateDatabase("location.db",
            SQLiteDatabase.CREATE_IF_NECESSARY, null);


        saveButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String fruitName;
                fruitName = fruitName.getText().toString();
    ContentValues fruitContent = new ContentValues();
    fruitContent.put("fruit_name",fruitName);


    if (!(db.isOpen())) {
    db = openOrCreateDatabase("location.db",SQLiteDatabase.CREATE_IF_NECESSARY, null);
    }
    fruitId = (int) db.update(FRUIT_TABLE, fruitContent,"fruit_id=" + f_P_Id, null);
    db.close();
    } else {
    if (!(db.isOpen())) {
    db = openOrCreateDatabase("location.db",SQLiteDatabase.CREATE_IF_NECESSARY, null);
        }
    fruitId = (int) db.insertOrThrow(FRUIT_TABLE, null,fruitContent);

    db.close();
    }
    Log.i(TAG, "New Fruit Id:" + fruitId);

    Intent intent = new Intent(firstActivity.this,secondActivity.class);
                    startActivity(intent);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

        });
}
}

public class secondActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        Log.i(TAG, "cmg");
        setContentView(R.layout.fruitlist);

        /**
         * database code
         */
        SQLiteDatabase db;
        db = openOrCreateDatabase("location.db",
                SQLiteDatabase.CREATE_IF_NECESSARY, null);
        if (db != null)
            Log.i(TAG, "database created");
        else
            Log.i(TAG, "DAtabase null");

        //db.execSQL(CREATE_TABLE_1);


        Cursor cursor = db.query(tablename, null, null, null, null, null, null);

        int listSize = cursor.getCount();
        final String[] fruit_List = new String[listSize + 1];

        cursor.moveToFirst();
        int arrIter = 0;
        while (cursor.isAfterLast() == false) {
            Log.i(TAG, "Coumn Value:" + cursor.getString(0));
            fruitList[arrIter] = cursor.getString(1);
            cursor.moveToNext();
            arrIter++;
        }
        fruit_List[arrIter] = "New Fruit";
        Log.i(TAG, "FruitList:");
        for (int i = 0; i < fruit_List.length; i++) {
            Log.i(TAG, "Fruit:" + fruit_List[i]);
        }
        Log.i(TAG, "Count:" + cursor.getCount());
        cursor.close();
        db.close();

        ListView listView = (ListView) findViewById(R.id.list);

        if (listView != null) {
            listView.setAdapter(new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, fruit_List));
        } else {
            Log.i(TAG, "Null");
        }


        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, show a toast with the TextView text

                Intent intent = new Intent(view.getContext(),
                        firstActivity.class);
                startActivity(intent);

            }
        });

    }

}

Каким-то образом мне не удается перейти к secondActivity и получить новый список.Кто-нибудь может мне помочь?

Спасибо.

Ответы [ 6 ]

1 голос
/ 02 апреля 2012

Вызов ListView.notifyDataseInvalidate() обновит ListView.

0 голосов
/ 02 апреля 2012

@ JModi: сделай что-нибудь вроде ниже ...

1) при нажатии кнопки: Вставьте правильную запись в базу данных.

2) Заставьте другой метод сказать «refreshList ()», в котором вы делаете то же самое, что используете для составления списка.

и вызывайте этот метод после ввода в базу данных.

-> Используйте вашу базу данных и снова составьте список. -> Не забудьте использовать метод listViewObject.clear () при запуске метода refreshList ().

Я сделал это, и этот метод работает нормально ... !! Надеюсь, это поможет вам ... !! Удачи .. !!

0 голосов
/ 02 апреля 2012

Для решения вашей проблемы вы должны использовать специальный адаптер. Лучшее и лучшее решение ..

ССЫЛКА для справки

0 голосов
/ 02 апреля 2012

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

Примечание: если вы используете адаптер, используйте функцию adapter.notifyDatasetChanged() для обновления списка в адаптере.

0 голосов
/ 02 апреля 2012

Есть ли у вас какие-либо исключения при нажатии кнопки сохранения?Если нет, вероятно, это означает, что прослушиватель щелчков не настроен должным образом, поэтому обязательно вводите метод onClick при каждом нажатии кнопки сохранения.

Вы также можете использовать атрибут android: onClick, чтобы избежать программной настройки прослушивателей щелчков.

В разделе кнопок макета XML:

android:onClick="onSaveButtonClicked"

В вашей деятельности:

public void onSaveButtonClicked(View view){
 ...
}
0 голосов
/ 02 апреля 2012

Если вы хотите обновить свой ListView, просто помните, что вам придется вставить это заявление.

listviewobject.setAdapter(adapter);

Это автоматически обновит список.

...