#refresh #android-linearlayout
#обновить #android-linearlayout
Вопрос:
У меня есть простое приложение, в одном действии я беру имя и дату рождения. Я сохраняю его в базе данных. и в основном действии у меня есть linearlayout, в котором будут отображаться все имена.
Когда я нажимаю на любое имя в основном действии, оно должно удалить это имя из базы данных, а также обновить представление.
Я могу удалить запись из базы данных, но мой линейный макет не обновляется. Может кто-нибудь, пожалуйста, помочь.
дочерний элемент публичного класса расширяет действие { private Intent intent; private LinearLayout layout; private LayoutInflater linflater; private int i = 0; private Cursor cr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.child);
layout = (LinearLayout)findViewById(R.id.layout);
Button addBtn = (Button)findViewById(R.id.AddButton);
Button remBtn = (Button)findViewById(R.id.RemoveButton);
intent = new Intent(this,login.class);
layout = (LinearLayout) findViewById(R.id.mylayout1);
linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Check the database if there are any entries available. If available, then
//list them on the main screen
final myDBAdapter mydb = new myDBAdapter(getApplicationContext());
mydb.open();
cr = mydb.GetMyData();
if(cr.getCount()>0)
{
cr.moveToFirst();
for (int i=0;i<cr.getCount();i )
{
cr.moveToPosition(i);
buildList(cr.getString(1),cr.getString(2));
}
}
//Start the login activity which will return the newly added baby name
addBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivityForResult(intent, 1001);
}
});
//Remove all the entries from Database
remBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(cr.getCount()>0)
{
cr.moveToFirst();
for (int i=0;i<cr.getCount();i )
{
Toast.makeText(getApplicationContext(), cr.getString(1),
Toast.LENGTH_LONG).show();
mydb.RemoveEntry(cr.getString(1));
cr.moveToPosition(i);
}
}
}
});
mydb.close();
}
private void buildList(final String bname,String bsex)
{
final View customView = linflater.inflate(R.layout.child_view,
null);
TextView tv = (TextView) customView.findViewById(R.id.TextView01);
//tv.setId(i);
tv.setText(bname);
tv.setTextColor(getResources().getColor(R.color.black));
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myDBAdapter mydb = new myDBAdapter(getApplicationContext());
mydb.open();
if (mydb.RemoveEntry(bname)>0)
{
Toast.makeText(getApplicationContext(), "Row deleted",
Toast.LENGTH_LONG).show();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ЧТО ЗДЕСЬ ТРЕБУЕТСЯ ДЛЯ ОБНОВЛЕНИЯ ПРЕДСТАВЛЕНИЯ???
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else
{
Toast.makeText(getApplicationContext(), "Row not deleted",
Toast.LENGTH_LONG).show();
}
}
});
layout.addView(customView);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == 1001)
{
if(resultCode == RESULT_OK)
{
Bundle extras = data.getExtras();
buildList(extras.getString("bname"),extras.getString("bsex"));
}
}
}
}
Ответ №1:
Хм, я тоже пытаюсь заставить это работать, вы пробовали посмотреть, возможно, обновлять LinearLayout каждые, скажем, 5 секунд, используя игровой цикл? Это может оказаться полезным, поскольку помогло мне с моей проблемойhttp://aubykhan.wordpress.com/2010/04/25/android-game-programming-the-game-loop
Вы также можете снова вызвать функцию onCreate (Bundle), хотя это ужасный, ужасный способ сделать это, он будет работать.