删除元素后如何刷新线性布局视图

发布于 2024-11-09 12:48:37 字数 3747 浏览 0 评论 0原文

我有一个简单的应用程序,在一项活动中我记录了姓名和出生日期。我将它存储在数据库中。在主要活动中,我有线性布局,它将显示所有名称。

当我单击主活动中的任何名称时,它应该从数据库中删除该名称并刷新视图。

我可以从数据库中删除该条目,但我的线性布局视图没有更新。有人可以帮忙吗?

公共类子扩展 Activity { 私人意图意图; 私有 LinearLayout 布局; 私有 LayoutInflater linflater; 私有 int i =0; 私有游标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"));

        }
    }
}

}

I have a simple app, in one activity I take name and date of birth. I store it in the database. and in the main activity I have linearlayout which will show all the names.

When I click on any of the name in the main activity, it should delete that name from the database and also refresh the view.

I am able to delete the entry from database, but my linear layout view is not being updated. Can some one pls help.

public class child extends Activity {
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();

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
WHAT IS REQUIRED HERE TO UPDATE THE VIEW???
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        }
        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"));

        }
    }
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心的憧憬 2024-11-16 12:48:37

嗯,我也在尝试让它工作,您是否尝试过使用游戏循环每隔 5 秒刷新一次 LinearLayout?这可能被证明是有用的,因为它帮助我解决了我的问题 http://aubykhan.wordpress.com/2010/04/25/android-game-programming-the-game-loop/

您也可以在此期间再次调用 onCreate(Bundle) 函数这是一种非常糟糕的方法,但它会起作用。

Hmm I'm also trying to get this to work, Have you tried looking at maybe refreshing the LinearLayout every say 5 seconds using a game loop? This may prove to be useful as it helped me with my problem http://aubykhan.wordpress.com/2010/04/25/android-game-programming-the-game-loop/

You may also be able to call onCreate(Bundle) function again while this is a terrible terrible way to do this it will work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文