2014-09-26 50 views
0

我有一个MainPage活动,用户登录后采取。该活动然后动态绘制一个按钮在屏幕上找到它找到的每个子类别在TableLayout的数据库中。这是有效的,但是如果用户注销并重新登录,MainPage将显示两倍的按钮数量(它永远不会删除原始设置)。使用removeView()移除的视图在那里,当我下次打开活动(Android)

我已经尝试在用户使用removeView()注销之前删除按钮。但是,当用户按下注销时,按钮消失并且登录活动被打开。当用户在第一组按钮中重新登录时仍然在屏幕上以及新设置中。

我是一个android新手,我找不到任何人有类似的问题,所以我不知道如果我在这里犯了一个相当愚蠢的错误。在我看来,我必须错误地打开MainPage,但我不确定。

以下是我认为与此问题相关的代码。

LoginActivity,我使用打开MainPageActivity行如果成功登录:

Intent mainPage = new Intent(getApplicationContext(), MainPageActivity.class); 
    mainPage.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    mainPage.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(mainPage); 

    // Close Login Screen 
    finish(); 

MainPageActivity,方法是刚刚闭幕的活动当用户按下退出之前调用。

public void removeSectionButtons(TableLayout tableLayout){ 
    int noOfRows = tableLayout.getChildCount(); 
    System.out.println("rows was "+noOfRows); 

    for(int i = 0; i<noOfRows; i++){ 
     int id=i+1; 
     TableRow row = (TableRow) tableLayout.getChildAt(id); 
     tableLayout.removeView(row); 
    } 

} 

MainPageActivity,按下注销时onOptionsItemSelected()中的情况。

 case R.id.action_logout: 
     tableLayout = (TableLayout)findViewById(R.id.MainPageTableTitle); 
     removeSectionButtons(tableLayout); 

     //code here to log out the user 
     menuHelper.logoutUser(userFunctions, getApplicationContext()); 
     return true; 

而在MenuHelper类最后logoutUser()方法:

 public void logoutUser(UserFunctions userFunctions, Context context){ 
     userFunctions.logoutUser(context); 
     Intent login = new Intent(context, LoginActivity.class); 
     login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     login.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     context.startActivity(login); 
     finish(); 
     } 
+0

为什么在添加按钮之前不要移除按钮?即在调用'addSectionButtons'之前调用'removeSectionButtons' – 2014-09-26 08:59:24

+0

这似乎并不是不幸的。我在过去发现,当我第一次打开该活动并在表格布局上调用getChildCount()时,它会显示0(即使从上次登录时屏幕上显示按钮)。然后,我再次调用drawButtons()并在调用getChildCount()之后立即调用它,并且它具有正确数量的子项(数据库中的按钮+以前打开活动时绘制的按钮)。所以removeSectionButtons()不会工作,因为它被称为getChildCount()返回0.你知道为什么会发生这种情况吗?谢谢你的时间 – user3707803 2014-09-26 09:13:05

回答

0

这是我不好,removeView()的工作。问题在于我的数据库处理。每次用户注销时,我都没有擦除手机上的SQLite数据库......但每次他们登录时,我都将数据从服务器复制到Lite数据库中。

这意味着当用户注销并重新登录到数据库中的所有字段时,它们已经被复制,因此我的代码正在显示数据库中的内容。