在随机化的问题列表上创建“收藏夹”功能
我很难为我的应用正确实现“收藏夹”功能。在对象列表中移动,用户应该能够选中/取消选中某些内容作为收藏夹。活动进入状态后,它应该保存收藏夹列表(相反,是指示某物是否收藏夹的布尔标记的完整列表... 对于收藏夹,对于不是收藏夹。显然,在进入状态后,应加载列表,以便他们可以查看以前标记的收藏夹。onPause();
true
false
onResume();
我认为,我的问题确实来自这样一个事实,即列表在初始化时是随机的。我确信我的算法是关闭的,但是我已经尝试了各种方法,以至于我几乎不能再勉强看到它了。
主要活动 爪哇
public class MainActivity extends ActionBarActivity {
Global global_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
global_main = Global.getInstance("all");
}
@Override
protected void onResume(){
super.onResume();
SharedPreferences settings = getSharedPreferences(FILE_FAVORITES, 0);
for(int index = 0; index < TOTAL_QUESTIONS; index++){
boolean favFromFile = settings.getBoolean(("savedFavorite_" + String.valueOf(index)), false);
global_main.setFav(index, favFromFile);
}
}
@Override
protected void onPause(){
super.onPause();
SharedPreferences settings = getSharedPreferences(FILE_FAVORITES, 0);
SharedPreferences.Editor editor = settings.edit();
for(int index = 0; index < TOTAL_QUESTIONS; index++){
editor.putBoolean(("savedFavorite_" + String.valueOf(index)), global_main.getFav(index));
// Commit the edits!
editor.commit();
}
}
练习爪哇
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
selectedSection = intent.getStringExtra(chooseSection.chosenSection);
global = Global.getInstance(selectedSection);
}
全球级
public class Global {
private static Global global = null;
//Current total of questions which the user has chosen
//EX: if Multiplication was chosen and has 10 questions in the array
//Then this equals 10
int CURRENT_TOTAL;
//This is the position that the first question of the user's choice starts with
//EX: If user chooses Multiplication, and the multiplication questions start at questions[19];
//Then this equals 19
int CURRENT_START;
//This is the position that the last question of the user's choice ends with
//EX: If user chooses Multiplication, and the multiplication questions end at questions[24];
//Then this equals 24
int CURRENT_END;
//Basic question structure
class questionStruct
{
String q;
String a;
int position; //original position in the array;
boolean favorite;
}
//Array of question structures
questionStruct[] questions = new questionStruct[TOTAL_QUESTIONS];
//userChoice is the choice of question type that the user has selected.
//EX: Multiplication, Division, Addition, Subtraction, or All/Default
public static Global getInstance(String userChoice) {
if(global == null)
{
global = new Global();
global.initialize();
}
global.getChoice(userChoice);
global.setQuestionsDefault();
global.randomize();
return global;
}
public void initialize() {
for (int i = 0; i < TOTAL_QUESTIONS; i++) {
questions[i] = new questionStruct();
}
questions[0].q = "Question 1 Text";
questions[0].a = "Answer";
questions[0].position = 0;
questions[1].q = "Question 2 Text";
questions[1].a = "Answer";
questions[1].position = 1;
questions[2].q = "Question 3 Text";
questions[2].a = "Answer";
questions[2].position = 2;
....ETC.
....ETC.
....ETC.
}
public void setQuestionsDefault(){
questionStruct temp = new questionStruct();
for(int index = 0; index < TOTAL_QUESTIONS; index++){
int count = questions[index].position;
temp = questions[count];
questions[count] = questions[index];
questions[index] = temp;
temp = null;
}
}
//Randomize the questions only within the range of the category
//which the user has chosen
public void randomize(){
for(int index = CURRENT_END; index >= CURRENT_START; index --)
{
//Generate random number to switch with random block
Random rand = new Random();
int currentQ = rand.nextInt((CURRENT_END - CURRENT_START) + 1) + CURRENT_START;
//Switch two Question blocks
questionStruct temp = questions[currentQ];
questions[currentQ] = questions[index];
questions[index] = temp;
}
}
public void setFav(int q, boolean b){
questions[q].favorite = b;
}
public boolean getFav(int q){
return questions[q].favorite;
}
这可能是与我的问题相关的一切。如果我遗漏了任何东西,或者如果某些事情没有意义,我深表歉意。随时提问。我目前仍在更改所有内容以使其正常工作,因此我可能已经复制了一些不太加起来的东西。
编辑:我还将添加“收藏夹”按钮的代码,单击以将收藏夹转换为非收藏夹,反之亦然。尽管这项工作至关重要,但这并不是我担心的正常运行,因为它非常简单。但是,如果有人觉得他们想看它,反过来帮助我,那么它就在这里。
这也在练习问题 Java 文件中:
public void setFavoriteButton(){
if(global.getFav(tempQQ)){
FAVORITE.setBackgroundColor(Color.YELLOW);
}
else{
FAVORITE.setBackgroundColor(getResources().getColor(R.color.primary));
}
}
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.favorite:
updateFavorite();
break;
}
}
public void updateFavorite(){
if(global.getFav(tempQQ)){
global.setFav(tempQQ, false);
}
else{
global.setFav(tempQQ, true);
}
setFavoriteButton();
}
编辑:我可能应该补充一点,我相信这个问题是算法。如果我没有将“随机化”功能与收藏夹结合使用,我想我会没事的。但我认为两者都对我的应用程序非常有用很重要。这就是我的重点所在,尝试同时实现收藏夹功能,同时在每次调用 Global 时保持随机化。