1

私は現在、フラグクイズアプリを作っており、スコアを追加したいと考えています。あなたはその写真を見ることができます。各フラグはフラグメントであり、それらを押すと、右側に回答を提出することができます。Androidスタジオクイズアプリ保存スコア

enter image description here

あなたは正しい答えを入力すると、「正しい」というメッセージが表示され、次のフラグに行くことができます。私は正解が1点、間違った点が1点(またはスキップまたはヒントが押された場合)スコアを0にします。最後に、スコアが要約されます。しかし、私はこれを行う方法がわかりません。スコアが登録されるScoreActivity.javaファイルを作成しましたが(現在は空ですが)、以下に示すコードを記述しようとしました。

Play.java

import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.app.FragmentManager; 
import android.view.View; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.view.View.OnClickListener; 
import android.view.LayoutInflater; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.view.ViewGroup; 


import layout.FragmentOne; 
import layout.FragmentTwo; 
import layout.FragmentThree; 
import layout.FragmentDefault; 


public class Play extends MainActivity { 


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


    final ImageButton imageBtn10 = (ImageButton) findViewById(R.id.imageButton10); 
    final ImageButton imageBtn9 = (ImageButton) findViewById(R.id.imageButton9); 
    final ImageButton imageBtn8 = (ImageButton) findViewById(R.id.imageButton8); 
    final ImageButton imageBtn7 = (ImageButton) findViewById(R.id.imageButton7); 
    final ImageButton imageBtn6 = (ImageButton) findViewById(R.id.imageButton6); 
    final ImageButton imageBtn5 = (ImageButton) findViewById(R.id.imageButton5); 
    final ImageButton imageBtn4 = (ImageButton) findViewById(R.id.imageButton4); 
    final ImageButton imageBtn3 = (ImageButton) findViewById(R.id.imageButton3); 

    FragmentManager fragMan = getFragmentManager(); 
    FragmentTransaction fragTrans = fragMan.beginTransaction(); 
    FragmentDefault fd = new FragmentDefault(); 
    fragTrans.replace(R.id.fragment_place, fd); 
    fragTrans.commit(); 

    fragTrans.hide(new FragmentOne()); 
    fragTrans.hide(new FragmentTwo()); 
    fragTrans.hide(new FragmentThree()); 

    imageBtn10.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       FragmentManager fragMan = getFragmentManager(); 
       FragmentTransaction fragTrans = fragMan.beginTransaction(); 
       fragTrans.replace(R.id.fragment_place, new FragmentOne()); 
       fragTrans.commit(); 
       imageBtn10.setEnabled(false); 
     } 

    }); 


    imageBtn9.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fragMan = getFragmentManager(); 
      FragmentTransaction fragTrans = fragMan.beginTransaction(); 
      fragTrans.replace(R.id.fragment_place, new FragmentTwo()); 
      fragTrans.commit(); 
     } 
    }); 

    imageBtn8.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       FragmentManager fragMan = getFragmentManager(); 
       FragmentTransaction fragTrans = fragMan.beginTransaction(); 
       fragTrans.replace(R.id.fragment_place, new FragmentThree()); 
       fragTrans.commit(); 
     } 
    }); 

    imageBtn7.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fragMan = getFragmentManager(); 
      FragmentTransaction fragTrans = fragMan.beginTransaction(); 
      fragTrans.replace(R.id.fragment_place, new FragmentThree()); 
      fragTrans.commit(); 
     } 
    }); 

    imageBtn6.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fragMan = getFragmentManager(); 
      FragmentTransaction fragTrans = fragMan.beginTransaction(); 
      fragTrans.replace(R.id.fragment_place, new FragmentThree()); 
      fragTrans.commit(); 
     } 
    }); 

    imageBtn5.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fragMan = getFragmentManager(); 
      FragmentTransaction fragTrans = fragMan.beginTransaction(); 
      fragTrans.replace(R.id.fragment_place, new FragmentThree()); 
      fragTrans.commit(); 
     } 
    }); 

    imageBtn4.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fragMan = getFragmentManager(); 
      FragmentTransaction fragTrans = fragMan.beginTransaction(); 
      fragTrans.replace(R.id.fragment_place, new FragmentThree()); 
      fragTrans.commit(); 
      //imageBtn4.setEnabled(false); 
     } 
    }); 

    imageBtn3.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fragMan = getFragmentManager(); 
      FragmentTransaction fragTrans = fragMan.beginTransaction(); 
      fragTrans.replace(R.id.fragment_place, new FragmentThree()); 
      fragTrans.commit(); 
     } 
    }); 

    Button button_score = (Button)findViewById(R.id.scoreButton); 
    button_score.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intentPlay = new Intent(Play.this, ScoreActivity.class); 
      startActivity(intentPlay); 
     } 
    }); 



} 




} 

FragmentOne.java(これは、ドイツのフラグの断片である)

import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.net.Uri; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.preference.PreferenceManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.TextView; 
//import android.widget.TextView; 


public class FragmentOne extends Fragment { 

EditText theAnswer; 
Button ScoreButton; 

private EditText userAnswer; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_fragment_one, null); 
    userAnswer = (EditText)v.findViewById(R.id.editText); 
    final TextView tv = (TextView)v.findViewById(R.id.showCorrect); 
    final TextView hintv = (TextView)v.findViewById(R.id.textHint); 


    final Button submit = (Button)v.findViewById(R.id.submitBtn1); 
    submit.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String theAnswer = (userAnswer.getText().toString()); 
      if (theAnswer.equalsIgnoreCase("Germany")) { 
       //TextView tv = (TextView)v.findViewById(R.id.showCorrect); 
       tv.setText("Correct!"); 

      } else { 

      } 
      submit.setEnabled(false); 

      // updateScore(); 
     } 
    }); 

    final Button skip = (Button)v.findViewById(R.id.skipBtn); 
    skip.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      submit.setEnabled(false); 
     } 
    }); 

    final Button hint = (Button)v.findViewById(R.id.hintBtn); 
    hint.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      hintv.setText("The capital is Berlin \n The country is in Europe \n It starts with G... "); 
      //submit.setEnabled(false); 
     } 
    }); 


    return v; 


} 

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ScoreButton = (Button)getView().findViewById(R.id.scoreButton); 


    final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    ScoreButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      SharedPreferences.Editor editor = app_preferences.edit(); 

      if (userAnswer.isChecked()){ 
       editor.putInt("answer_value", 1); 
      } 
      else { 
       editor.putInt("answer_value", 0); 
      } 
      editor.commit(); 
     } 
    }); 
} 



} 

.isChecked()赤色に現れます。私は何かを輸入する必要がありますか?

+1

1)何かが赤でハイライト表示されたら、あなたは、Android Studioでエラーが表示されるはずです。 2)私は 'editText.setTag(score)'を使うか、答えをチェックし、ブール値をsave関数に渡すか、アクティビティにスコア変数を保持します。 3)スコアに追加するのではなく、毎回同じSharedPreferencesキーを0または1で上書きしています – NineToeNerd

答えて

2

まず最初に、これらのフラグメントをすべて使用している理由は何ですか?データを更新する単一のフラグメントを使用して質問間で交替することはできませんか?

EditTextクラスにはisChecked()メソッドがありません。 このメソッドを使用するには、CheckBoxクラスを使用する必要があります。

ウィジェットを使用して、テキストタイプHTML inputなどのユーザー入力を受け取ります。 がチェックされ、論理的にベンがHTML checkbox

のようにあなたののEditText(ユーザーの回答)にテキストを入れているし、それが確認されていますならば、あなたは、文字列オブジェクトフィールドに求めている、確認することができた項目のプロパティです。それは意味がありません。

本当に必要なのは、ユーザーの回答が正解と一致する場合(ブール値の場合など)のストアです。

final Button submit = (Button)v.findViewById(R.id.submitBtn1); 
    submit.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String theAnswer = (userAnswer.getText().toString()); 
      if (theAnswer.equalsIgnoreCase("Germany")) { 
       //TextView tv = (TextView)v.findViewById(R.id.showCorrect); 
       tv.setText("Correct!"); 
       // keep trace of user answer result 
       wellAnswered = true; 
      } else { 

      } 
      submit.setEnabled(false); 

      // updateScore(); 
     } 
    }); 

を次のように続いて、あなたのFragmentOneコードを更新することができます:

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ScoreButton = (Button)getView().findViewById(R.id.scoreButton); 


    final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    ScoreButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      SharedPreferences.Editor editor = app_preferences.edit(); 

      if (wellAnswered){ 
       editor.putInt("answer_value", 1); 

       // remember to reset your variable for next question 
       wellAnswered = false; 
      } 
      else { 
       editor.putInt("answer_value", 0); 
      } 
      editor.commit(); 
     } 
    }); 
} 
+0

どうすればよいですか? –

+0

@KaraW私があなただったら、私はここに起動したい:https://developer.android.com/training/index.html – NineToeNerd

+0

@firegloves私はあなたの提案に応じてコードを変更し、以下のことを投稿しました。今、アプリはクラッシュしています。私は何が欠けているのですか? –

0

スコアを保存するには、あなたがいろいろ書いこのように、結果のTextViewに「正しい」に設定するときは、この値を設定することができますSharedPreferencesを使用できます。ドキュメントごとに:

保存するキー値のコレクションが比較的少ない場合は、SharedPreferences APIを使用する必要があります。 SharedPreferencesオブジェクトは、キーと値のペアを含むファイルを指し、読み書きするための簡単なメソッドを提供します。各SharedPreferencesファイルは、フレームワークによって管理され、プライベートまたは共有にすることができます。

SharedPreferencesをスコアの保存に使用するにはどうすればよいですか?

onClickListener()SharedPreferencesファイルから既存の値を取得し、いずれかによって、それをインクリメント内のユーザーは、submitボタンをクリックするたびに。


どうすればいいですか?

まあまず、SharedPreferencesのインスタンスを作成します。

private SharedPreferences sharedpreferences; 

、それを初期化します。

onClickListener()内側その後、
sharedpreferences = getSharedPreferences("mypref", Context.MODE_PRIVATE); 

SharedPreferences.Editor editor = sharedpreferences.edit(); 
editor.putInt("SCORE", sharedpreferences.getInt("SCORE",0)+1); 
editor.apply(); 

だから、これが何をするかです、 Key値のペアを作成します。ここで、th eキーはSCOREであり、putInt()メソッドはキーに関連付けられた値を挿入します。この場合はSCOREです。

注記sharedpreferences.getInt("SCORE",0)+1)これは、スコアが1つ増えます。最後にapply()は、SharedPreferencesファイルにデータを保存します。


スコアを取得するにはどうすればよいですか?

sharedpreferences = getSharedPreferences("mypref", Context.MODE_PRIVATE); 
int score = sharedpreferences.getInt("SCORE",0) 

0はデフォルト値です。


希望すると助かります!

+0

ああ私はあなたのロジックを見ることができます!私のコードのどこにこれらの異なる部分を置くべきか、既存のコードのどの部分を削除すべきかについてちょっとわかりません。 –

0

だから私はFragmentOne.javaにコードを修正してきた、そして今、それは次のようになります。

public class FragmentOne extends Fragment { 

private EditText userAnswer; 
private boolean wellAnswered; 
private Button ScoreButton; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_fragment_one, null); 
    userAnswer = (EditText)v.findViewById(R.id.editText); 
    final TextView tv = (TextView)v.findViewById(R.id.showCorrect); 
    final TextView hintv = (TextView)v.findViewById(R.id.textHint); 

    final Button submit = (Button)v.findViewById(R.id.submitBtn1); 
    submit.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String theAnswer = (userAnswer.getText().toString()); 
      if (theAnswer.equalsIgnoreCase("Germany")) { 
       //TextView tv = (TextView)v.findViewById(R.id.showCorrect); 
       tv.setText("Correct!"); 
       wellAnswered = true; 

      } else { 

      } 
      submit.setEnabled(false); 

      // updateScore(); 
     } 
    }); 

    final Button skip = (Button)v.findViewById(R.id.skipBtn); 
    skip.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      submit.setEnabled(false); 
     } 
    }); 

    final Button hint = (Button)v.findViewById(R.id.hintBtn); 
    hint.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      hintv.setText("The capital is Berlin \n The country is in Europe \n It starts with G... "); 
      //submit.setEnabled(false); 
     } 
    }); 


    return v;} 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     ScoreButton = (Button)getView().findViewById(R.id.scoreButton); 


     final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     ScoreButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       SharedPreferences.Editor editor = app_preferences.edit(); 

       if (wellAnswered){ 
        editor.putInt("answer_value", 1); 

        // remember to reset your variable for next question 
        wellAnswered = false; 
       } 
       else { 
        editor.putInt("answer_value", 0); 
       } 
       editor.commit(); 
      } 
     }); 
    } 



} 

私はあなたの答えからの提案を使用していると私はエラーを取得していない、しかし、アプリがクラッシュしたときにIフラグを押してください。私が間違っていることは何か考えていますか?

STACKTRACE

01-06 20:08:18.152 3912-3912/? I/art: Not late-enabling -Xcheck:jni (already on) 
01-06 20:08:18.153 3912-3912/? W/art: Unexpected CPU variant for X86 using defaults: x86 
01-06 20:08:18.189 3912-3919/? I/art: Debugger is no longer active 
01-06 20:08:18.189 3912-3919/? I/art: Starting a blocking GC Instrumentation 
01-06 20:08:18.294 3912-3912/? W/System: ClassLoader referenced unknown path: /data/app/com.example.karolinawullum.quizapp-1/lib/x86 
01-06 20:08:18.299 3912-3912/? I/InstantRun: Instant Run Runtime started. Android package is com.example.karolinawullum.quizapp, real application class is null. 

              [ 01-06 20:08:18.311 1560: 1583 D/   ] 
              HostConnection::get() New Host Connection established 0x8d661580, tid 1583 
01-06 20:08:18.378 3912-3912/? W/System: ClassLoader referenced unknown path: /data/app/com.example.karolinawullum.quizapp-1/lib/x86 
01-06 20:08:18.487 3912-3912/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
01-06 20:08:18.608 3912-3933/? I/OpenGLRenderer: Initialized EGL, version 1.4 
01-06 20:08:18.610 3912-3933/? D/OpenGLRenderer: Swap behavior 1 
01-06 20:08:18.637 3912-3933/? E/EGL_emulation: tid 3933: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
01-06 20:08:18.637 3912-3933/? W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x90557900, error=EGL_BAD_MATCH 
+0

私はあなたのスタックトレースを理解できません。ビルドフォルダのクリーニングまたは削除を試みるか、[ファイルを無効にする]/[ファイルから再起動]を選択してください。あなたのコードで何らかの行を指し示すか、指し示すようなものでスタックトレースの行を持っていませんか?しかし、differentsを使用するとフラグメントが複雑になります – firegloves

+0

@firegloves SharedPreferences.javaファイル(スコアが保存される場所)はかなり空です。その中にいくつかのコードを追加する必要がありますか? –

関連する問題