2012-04-19 61 views
0

我创建了一个活动,当用户单击按钮时刷新引号。在同一活动中,有一个复选框,如果用户喜欢该报价,用户可以点击该复选框。活动未重新加载时,复选框刷新不工作 - Android

除了复选框外,一切都可以正常工作。当用户点击他们喜欢的报价,我希望复选框被选中。只有当用户离开活动并在稍后阶段返回时才会发生这种情况。

但是,当用户停留在活动中并返回报价时,将显示旧状态而不是用户首选项。

即使在数据库中,该复选框也是从值中配置的,如果值为1,则应勾选复选框,如果不勾选复选框应清除。

的代码如下所示:

当用户点击下一步按钮,下面的代码被执行:

Button nextGenerateButton = (Button) findViewById(R.id.btn_next_quotes); 
nextGenerateButton.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     String nextQuote = myDbHelper.getnextQuote(); 
     setQuoteDisplay(nextQuote); 
     btn_favorite.setChecked(myDbHelper.getFavouriteCheckBoxValue()); 

    } 
}); 

按钮检索下一个报价和getFavouriteCheckBoxValue()确认是否喜爱列在数据库中被标记,并且返回一个设置复选框值的false的true。

public boolean getFavouriteCheckBoxValue() 
    { 
     int laballedFavourite = cursor.getInt(0); 

     if(laballedFavourite == 0) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

如果用户喜欢该报价,该代码执行,其更新,其中喜爱列将在一个被修改的表的addFavourite()。

btn_favorite.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // TODO Auto-generated method stub    
     if(isChecked == true) 
     { 
      myDbHelper.addFavourite(); 
     } 

     if(isChecked == false) 
     { 
      myDbHelper.removeFavourite(); 
     } 
    } 
}); 


public void addFavourite() 
{ 
    ContentValues vals = new ContentValues(); 
    vals.put("favouriteQuote", 1); 
    db.update(TABLE_NAME, vals, "columnId = " + cursor.getInt(1), null); 
} 

当我再次恢复报价活动,而不是当我目前住在报价活动这只完美的作品。

希望这是有道理的。

任何帮助将不胜感激。

回答

0

您需要刷新复选框才能看到更改,因为您在数据库中进行了更改,但在用户界面上没有更改。您需要观察数据库并在修改后刷新复选框。

+0

btn_favorite.setChecked(myDbHelper.getFavouriteCheckBoxValue());在下一个按钮和后退按钮上执行,但只有在刷新活动时才会刷新复选框。 – user983965 2012-04-19 15:06:14

+1

为此,您需要在获取数据库中的值之前重新创建游标。 – FUBUs 2012-04-19 15:50:51