2015-02-07 46 views
0

我有2个活动。在第一个我选择一个级别。在第二个我玩游戏。在第二个活动中,我回答问题,每次我正确回答时,我向我的数组列表中添加一个值。当游戏结束时,用户返回级别选择活动,并在那里他可以看到他的分数。例如:Level1:您正确回答了17个问题。我怎样才能做到这一点?我尝试使用sharedpreferences但没有运气。它总是显示0.我猜测它是因为它在游戏开始时获得了值,当列表为空时。游戏结束后,如何在列表填充后显示值?使用SharedPreferences保存用户得分

这是女巫的游戏活动创建一个列表,在其中存储值,并回答问题:

public class MainActivity extends Activity { 

    Button mYes; 
    Button mNo; 
    TextView mQuestion; 
    Button btnClosePopup; 
    TextView mPopupText; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final int[] count = {0}; // Global array. 
     final int[] score = {0}; 
     //final int[] intArray = new int[3]; 
     mYes = (Button) findViewById(R.id.button2); 
     mPopupText = (TextView)findViewById(R.id.popupTekstas); 
     btnClosePopup = (Button)findViewById(R.id.btn_close_popup); 
     mNo = (Button) findViewById(R.id.button); 
     mQuestion = (TextView) findViewById(R.id.textView); 



     //Creating questions. (Question, boolean, answer). 
     final Question first = new Question("Do i understand this code?", true, "Only Jesus knows"); 
     final Question second = new Question("Why dont i understand this code?", false, "Im not Jesus"); 
     final Question third = new Question("Why I am not Jesus?", true, "2fat."); 
     //Creating Lists for questions and boolean values. 
     final ArrayList<Question> questions = new ArrayList<Question>(); 
     final ArrayList<Boolean> type = new ArrayList<Boolean>(); 

     final ArrayList<Integer> points = new ArrayList<Integer>(); 

     SharedPreferences sharedPref = getSharedPreferences("level1", Context.MODE_PRIVATE); 

     SharedPreferences.Editor editor = sharedPref.edit(); 

     editor.putInt("taskai", points.size()); 

     editor.commit(); 

     //mResult.setText("zdr"); 

     //Adding questions to the question list 
     questions.add(first); 
     questions.add(second); 
     questions.add(third); 



     // Adding boleans to the boolean list 
     type.add(first.correctAnswer); 
     type.add(second.correctAnswer); 
     type.add(third.correctAnswer); 

     //Show the first question on Activity start. 
     mQuestion.setText(questions.get(0).question); 


     // Open PopUp Window on true button click. 
     mYes.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       initiatePopupWindow(); 
       if(type.get(count[0])){ 

        ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstasTiesaArNe)).setText("Correct!"); 
       } else { 
        ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstasTiesaArNe)).setText("False!"); 
       } 
       //Show the first answer on first button click. 
       ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstas)).setText(questions.get((count[0]) % questions.size()).answer); 
     // When PopUp button closes open the next question with the if/else conditions. 
      btnClosePopup.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //if the question is true show next question/ else close app 
        if (type.get(count[0])) { 
         points.add(1); // if the answer is correct add +1 to the list. 
         score[0]++; 
         if(questions.size()-1 == count[0]) // if you count[0] is init to 0 
         { 

          AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
          builder.setTitle("WInner"); 
          builder.setMessage("You won, play again?"); 
          builder.setCancelable(false); 
          builder.setPositiveButton(android.R.string.yes, 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int id) { 
              // just close dialog 
              dialog.cancel(); 
             } 
            }); 
          builder.setNegativeButton(android.R.string.no, 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int id) { 
             finish(); 

             // mResult.setText("" + points.size()); 

             } 
            }); 

          // Create dialog from builder 
          AlertDialog alert = builder.create(); 

          // Show dialog 
          alert.show(); 
          count[0]=0; 


         } 
         else if(questions.size()-1 < count[0]) 
          try { 
           throw new Exception("Invalid "); 
          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         else 
         count[0]++; 

         mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore 
         pwindo.dismiss(); 
        } else { 
         count[0]++; 

         mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore 
         pwindo.dismiss(); 
        } 

       } 
      }); 

      } 
     }); 

     mNo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       initiatePopupWindow(); 
       if(!type.get(count[0])){ 

        ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstasTiesaArNe)).setText("Correct!"); 
       } else { 
         ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstasTiesaArNe)).setText("False!"); 
       } 
       ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstas)).setText(questions.get((count[0]) % questions.size()).answer); 

       btnClosePopup.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 

         if (!type.get(count[0])) { 
          points.add(1); // if the answer is correct add +1 to the list. 
          score[0]++; 
          if(questions.size()-1 == count[0]) // if you count[0] is init to 0 
          { 

           AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
           builder.setTitle("WInner") 
             .setMessage("You won, play again?") 
             .setCancelable(false) 
             .setPositiveButton(android.R.string.yes, 
               new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int id) { 
                 // just close dialog 
                 dialog.cancel(); 
                } 
               }) 
             .setNegativeButton(android.R.string.no, 
               new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int id) { 
                 finish(); 
                 //mResult.setText("" + points.size()); 





                } 
               }); 

           // Create dialog from builder 
           AlertDialog alert = builder.create(); 

           // Show dialog 
           alert.show(); 
           count[0]=0; 

           ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstasTiesaArNe)).setText("Klaida!"); 
          } 
          else if(questions.size()-1 < count[0]) 
           try { 
            throw new Exception("Invalid "); 
           } catch (Exception e) { 
            e.printStackTrace(); 
           } 
          else 
           count[0]++; 

          mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore 
          pwindo.dismiss(); 
         } else { 
          count[0]++; 
          mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore 
          pwindo.dismiss(); 
         } 

        } 
       }); 


      } 
     }); 
    } 

    public PopupWindow pwindo; 

    public void initiatePopupWindow() { 
      try { 
// We need to get the instance of the LayoutInflater 
      LayoutInflater inflater = (LayoutInflater) MainActivity.this 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View layout = inflater.inflate(R.layout.popup, 
        (ViewGroup) findViewById(R.id.popup_element)); 
      pwindo = new PopupWindow(layout, 500, 570, true); 
      pwindo.showAtLocation(layout, Gravity.CENTER, 0, 0); 

      btnClosePopup = (Button) layout.findViewById(R.id.btn_close_popup); 
      btnClosePopup.setOnClickListener(cancel_button_click_listener); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public View.OnClickListener cancel_button_click_listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      pwindo.dismiss(); 
     } 
    }; 

在该活动中我尝试获取列表值,并将其:

public class LevelSelectActivity extends MainActivity { 

    Button mLevel1; 
    public TextView mResult; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_level_select); 

     SharedPreferences sharedPref = getSharedPreferences("level1", Context.MODE_PRIVATE); 

     int result = sharedPref.getInt("taskai", 0); 


     mLevel1 = (Button)findViewById(R.id.level1); 
     mResult = (TextView)findViewById(R.id.Resultas); 
     // mResult.setText(players.size()-1 + "/" + 3); 

     mResult.setText("" + result); 

     mLevel1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent startGame = new Intent(LevelSelectActivity.this, MainActivity.class); 
       startActivity(startGame); 

      } 
     }); 
    } 
+0

你可以通过像LevelSelectActivity意图参数像startGame.putExtras(“key”,value);两者都是字符串,只有当你想获得MainActivity然后调用getIntent()。getStringExtra(“key”)时,它才会执行。 – Hanuman 2015-02-07 12:34:37

+0

游戏结束时保存分数。也真的不需要使用ArrayList。只要使用一个int值并且每当玩家获得一个点时就增加它。 – Longi 2015-02-07 12:35:06

+0

但是这个分数会保存吗? – Arina 2015-02-07 12:35:30

回答

0

我不确定您的代码中发生了什么,但我确实知道首选项不是传递数据的最佳方式。

您最好使用set results/ get results pattern

的第一项活动使用

startActivityForResult(intent, LEVEL_REQUEST); 

它还会创建一个函数来读回数据它完成之后。这会是这个样子:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == LEVEL_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 

     } 
    } 
} 

活动将结果发送将做到这一点,以公布结果:

Intent resultsIntent=new Intent(); 
//Set data in the intent, note this intent is returned to the original function in `onActivityResult` 
setResult(Activity.RESULT_OK,resultsIntent); 

第二活动采用