У меня есть следующий код. Что я хочу достичь, это обновить отображаемый список, когда я нажимаю на запись, чтобы я мог пройти через список. Я нашел два способа без ранений, чтобы сделать это здесь, в stackoverflow, но не работает. Я также получил совет по созданию нового ListActivity для обновления данных, но это похоже на трату ресурсов?Как обновить Android ListActivity при изменении данных подключенного SimpleCursorAdapter
EDIT: Я нашел решение самостоятельно. Все, что вам нужно сделать, это вызвать «SimpleCursorAdapter.changeCursor (новый курсор)». Никаких уведомлений, никаких вещей в UI-Thread или что-то еще.
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MyActivity extends ListActivity {
private DepartmentDbAdapter mDbHelper;
private Cursor cursor;
private String[] from = new String[] { DepartmentDbAdapter.KEY_NAME };
private int[] to = new int[] { R.id.text1 };
private SimpleCursorAdapter notes;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.departments_list);
mDbHelper = new DepartmentDbAdapter(this);
mDbHelper.open();
// Get all of the departments from the database and create the item list
cursor = mDbHelper.fetchSubItemByParentId(1);
this.startManagingCursor(cursor);
// Now create an array adapter and set it to display using our row
notes = new SimpleCursorAdapter(this, R.layout.department_row, cursor, from, to);
this.setListAdapter(notes);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// get new data and update the list
this.updateData(safeLongToInt(id));
}
/**
* update data for the list
*
* @param int departmentId id of the parent department
*/
private void updateData(int departmentId) {
// close the old one, get a new one
cursor.close();
cursor = mDbHelper.fetchSubItemByParentId(departmentId);
// change the cursor of the adapter to the new one
notes.changeCursor(cursor);
}
/**
* safely convert long to in to save memory
*
* @param long l the long variable
*
* @return integer
*/
public static int safeLongToInt(long l) {
if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) {
throw new IllegalArgumentException
(l + " cannot be cast to int without changing its value.");
}
return (int) l;
}
}
Я изменил функцию UpdateData на это без какого-либо использования, я искал мою задницу, чтобы найти, как это сделать, чтобы найти пример, учебник ... ничего. Разочарование, поскольку я пытаюсь заставить это работать в течение 2 дней. Не могу поверить, что никто не имел этой проблемы раньше! \t private void updateData (int departmentId) {\t \t \t this.stopManagingCursor (курсор); \t \t cursor.close(); \t \t cursor = mDbHelper.fetchSubItemByParentId (departmentId); \t \t this.startManagementCursor (курсор); \t \t Заметки SimpleCursorAdapter = новый SimpleCursorAdapter (это, R.layout.department_row, cursor, from, to); \t \t this.setListAdapter (примечания); \t} – DarsVaeda
Обновите свой код. Я позабочусь об этом сегодня. – Snicolas
Вы недалеко, он должен быть близок к работе сейчас – Snicolas