1

현재 퀴즈 앱을 만들고 있는데 점수를 추가하고 싶습니다. 아래 그림을 볼 수 있습니다. 각 플래그는 단편입니다.이 플래그를 누르면 오른쪽에서 대답을 제출할 수 있습니다. Android Studio 퀴즈 앱 저장 점수

enter image description here

올바른 대답을 입력

는 "올바른"메시지가 나타납니다, 당신은 다음 플래그로 이동할 수 있습니다. 나는 득점 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). 2)'editText.setTag (score)'를 사용하거나 답변을 확인하고 저장 함수에 부울을 전달하거나 활동에 점수 변수를 보관합니다. 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

점수을 저장하려면, 당신이가 someting이 같은 결과 텍스트 뷰에서 "올바른"로 설정하면이 값을 설정할 수 있습니다 SharedPreferences을 사용할 수 있습니다. 문서 당 :

비교적 적은 키 - 값 모음을 저장하려는 경우 SharedPreferences API를 사용해야합니다. SharedPreferences 객체는 키 - 값 쌍이 포함 된 파일을 가리키고 읽기 및 쓰기를위한 간단한 메서드를 제공합니다. 각 SharedPreferences 파일은 프레임 워크에서 관리하며 비공개 또는 공유가 가능합니다.

점수를 저장하는 데 SharedPreferences을 어떻게 사용합니까?

onClickListener()SharedPreferences 파일에서 기존 값을 검색하고 하나를 증가 내부 사용자의 submit 버튼을 클릭 할 때마다.


어떻게 할 수 있습니까? onClickListener() 내부에 다음

sharedpreferences = getSharedPreferences("mypref", Context.MODE_PRIVATE); 

:

private SharedPreferences sharedpreferences; 

다음 초기화 :

그럼 먼저, SharedPreferences의 인스턴스를 생성

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

그래서이다이 무엇을, 키 값 쌍을 만듭니다. 여기서, 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(); 
      } 
     }); 
    } 



} 

나는 오류없이, 그러나, 응용 프로그램이 충돌했을 때 얻을 플래그를 누르십시오. 내가 뭘 잘못하고 있는거야?

스택 트레이스 : 뭔가가 빨간색으로 강조하면 당신은 안드로이드 Studio에서 오류를 볼 수

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 파일 (점수 저장 위치)은 거의 비어 있습니다. 그 중 일부 코드를 추가해야합니까? –