2010-11-19 1 views
0

У меня есть активность Android, которая onCreate() запрашивает базу данных и отображает результаты запроса в текстовых просмотров в пользовательском интерфейсе.android update activity textview после изменений с другого действия

Проблема, с которой я столкнулся, в какой-то момент, пользователи могут открыть другое действие и обновить базу данных. Когда они возвращаются к первоначальной активности, я хотел бы, чтобы текстовые представления обновлялись с новой информацией о базе данных (поэтому я буду повторно запрашивать базу данных и отображать информацию).

Еще одна вещь, которую я желаю сделать, - это взять новый ввод от пользователя (в новом действии) и непосредственно обновить текстовое представление в существующей деятельности (без повторного запроса существующей активности в базе данных). Но я не уверен, как это сделать.

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

Буду признателен за любые советы. Благодаря!

ответ

3

Если объем данных, отображаемых в виде списка, невелик, самым простым решением является просто запрос в базе данных в методе onResume(). Этот метод всегда вызывается, когда активность снова отображается пользователем.

BroadcastReceiver - это хорошо, но усилия не стоят такой простой задачи.

+0

Владимир, см. Мой комментарий к сообщению выше. Благодаря! – littleK

+0

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

+0

Ах, неважно, я неправильно установил значения, полученные из базы данных. Спасибо за вашу помощь! – littleK

2

Вы можете сделать:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    db.beginTransaction(); 
    Cursor cur = null; 
    try { 
     cur = db.query("table", 
      null, null, null, null, null, null); 
     cur.moveToPosition(0); 
     String titleString = cur.getString(cur.getColumnIndex("title")); 
     db.setTransactionSuccessful(); 
    } catch (Exception e) { 
     Log.e("Error in transaction", e.toString()); 
    } finally { 
     db.endTransaction(); 
     cur.close(); 
    } 
} 

Сделки очень быстро. Вы можете использовать метод onResume() для заполнения Textview.

+0

Я попытался использовать onResume() для повторного запроса базы данных, а затем setText() в TextView, но он, похоже, не обновляется. Все идеи? – littleK

0

Если вы используете setText в своем onResume, вам все равно нужно обновить/перерисовать через обработчик. Самый простой способ, который я нашел, - перерисовать представление макета базы.

LinearLayout myBaseLayout = (LinearLayout)findViewById(R.id.linearlayout01); 
myBaseLayout.invalidate(); 

Просто убедитесь, что это в вашем методе обработчика.

Смежные вопросы