как обновить вид линейного макета после удаления элемента - PullRequest
1 голос
/ 24 мая 2011

У меня есть простое приложение, в одном упражнении я беру имя и дату рождения. Я храню это в базе данных. и в основной деятельности у меня есть linearlayout, который покажет все имена.

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

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

ребенок из публичного класса расширяет Activity { частное намерение; приватный макет LinearLayout; приватный LayoutInflater linflater; private int i = 0; частный курсор кр

/** 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 Ответ

0 голосов
/ 15 сентября 2011

Хм. Я тоже пытаюсь заставить это работать. Вы пробовали смотреть на обновление LinearLayout, скажем, каждые 5 секунд, используя игровой цикл? Это может оказаться полезным, так как помогло мне с моей проблемой http://aubykhan.wordpress.com/2010/04/25/android-game-programming-the-game-loop/

Вы также можете снова вызывать функцию onCreate (Bundle), пока это ужасно, ужасно, это будет работать.

...