2013-11-27 2 views
0

У меня есть приложение для Android, в котором отображается флаг и группа переключателей, каждый раз, когда пользователь проверяет любой переключатель, приложение отображает кнопку, которая позволяет перейти к следующему страницы с использованием намерения.проверить, правильно ли установлен radioButton и рассчитать оценку

Что мне нужно - каждый раз, когда пользователь проверяет правильный ответ, система должна рассчитать свой балл, пока приложение не закончит. счет начинается 0/0 и финиширует уже после четырех раундов.

сейчас мне нужно просто показывать счет пользователя на второй странице

Я буду признателен за любую помощь

MainActivity.java

package com.devleb.flagology; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    Button btnS; 
    RadioGroup rdgS; 
    RadioButton rdS1, rdS2, rdS3, rdS4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     rdgS = (RadioGroup) findViewById(R.id.rdg1); 
     rdgS.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       // TODO Auto-generated method stub 
       if(rdS1.isChecked()||rdS2.isChecked()||rdS3.isChecked()||rdS4.isChecked()){ 
        btnS.setVisibility(View.VISIBLE); 

       } 
      } 
     }); 

     rdS1 = (RadioButton) findViewById(R.id.rd_s1); 
     rdS2 = (RadioButton) findViewById(R.id.rd_s2); 
     rdS3 = (RadioButton) findViewById(R.id.rd_s3); 
     rdS4 = (RadioButton) findViewById(R.id.rd_s4); 

     btnS = (Button) findViewById(R.id.btn_s); 
     btnS.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       String input; 
       String result = null; 
       Double dbl; 

       Intent i = new Intent(MainActivity.this, SecondActivity.class); 
       switch (v.getId()) { 
      case R.id.rd_s1: 
       input = rdS1.getText().toString(); 
       dbl = Double.parseDouble(input); 

       i.putExtra("score", 0); 
       break; 
      case R.id.rd_s2: 
       i.putExtra("score", 0); 
       break; 
      case R.id.rd_s3: 
       i.putExtra("score", 25); 
       break; 
      case R.id.rd_s4: 
       i.putExtra("score", 0); 
       break; 

      default: 
       break; 
      } 
       startActivity(i); 

      } 
     }); 



    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     switch (item.getItemId()) { 
     case R.id.hint_icon: 
      ShowAlertDialog(); 
      break; 
     case R.id.about_icon: 
      Toast.makeText(this, "developed by Georges Matta", 
        Toast.LENGTH_SHORT).show(); 
     default: 
      break; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void ShowAlertDialog() { 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Hint") 
       .setMessage("The famouse sport is Bullfighting") 
       .setCancelable(false) 
       .setNegativeButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

} 

отредактированный код

rdS1 = (RadioButton) findViewById(R.id.rd_s1); 
     rdS2 = (RadioButton) findViewById(R.id.rd_s2); 
     rdS3 = (RadioButton) findViewById(R.id.rd_s3); 
     rdS4 = (RadioButton) findViewById(R.id.rd_s4); 

     btnS = (Button) findViewById(R.id.btn_s); 
     btnS.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       String input; 
       String result = null; 
       Double dbl; 

       Intent i = new Intent(MainActivity.this, SecondActivity.class); 
       switch (rdgS.getCheckedRadioButtonId()) { 
       case R.id.rd_s1: 
        input = rdS1.getText().toString(); 
        dbl = Double.parseDouble(input); 
        result = String.valueOf(dbl); 

        i.putExtra("score", result); 
        break; 

деятельность_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/background" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="34dp" 
     android:src="@drawable/spanish" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/imageView1" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="Gess the Country of the flag" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="#CCFF99" /> 

    <RadioGroup 
     android:id="@+id/rdg1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/imageView1" > 

     <RadioButton 
      android:id="@+id/rd_s1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="true" 
      android:text="Egypt" 
      android:textColor="#CCFF99" /> 

     <RadioButton 
      android:id="@+id/rd_s2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="China" 
      android:textColor="#CCFF99" /> 

     <RadioButton 
      android:id="@+id/rd_s3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Spanish" 
      android:textColor="#CCFF99" /> 

     <RadioButton 
      android:id="@+id/rd_s4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignRight="@+id/radioGroup1" 
      android:layout_below="@+id/radioGroup1" 
      android:text="Italy" 
      android:textColor="#CCFF99" /> 
    </RadioGroup> 

    <Button 
     android:id="@+id/btn_s" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/rdg1" 
     android:layout_below="@+id/rdg1" 
     android:text="Next" 
     android:visibility="invisible" /> 

</RelativeLayout> 

SecondActivity.java

package com.devleb.flagology; 



import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.TextView; 

public class SecondActivity extends Activity { 

    TextView txt_result; 

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

     txt_result = (TextView) findViewById(R.id.txtResult); 

     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      String value = extras.getString("score"); 
      txt_result.setText(value); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.second, menu); 
     return true; 
    } 

} 

activity_second.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".SecondActivity" > 

    <TextView 
     android:id="@+id/txtResult" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
+1

Так в чем проблема, что у вас есть? –

+0

Используйте намерение отправить счет во вторую активность? – Stupidus

+0

проблема в том, что как рассчитать счет и как показать его во втором действии, используя намерение – user3006788

ответ

0

Простое решение заключается в изменении вашего switch дело следующим образом:

... 
Intent i = new Intent(MainActivity.this, SecondActivity.class); 
switch (rdgS.getCheckedRadioButtonId()) { 
    case R.id.rd_s1: 
     input = rdS1.getText().toString(); 
     dbl = Double.parseDouble(input); 

     i.putExtra("score", 0); 
     break; 
    case R.id.rd_s2: 
     i.putExtra("score", 0); 
     break; 
    case R.id.rd_s3: 
     i.putExtra("score", 25); 
     break; 
    case R.id.rd_s4: 
     i.putExtra("score", 0); 
     break; 

    default: 
     break; 
} 

startActivity(i); 
... 
... 

После этого, так как ваш проходят в int значений, вы должны использовать getInt() метод. В вашей картине SecondActivity выполните следующие действия:

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    String value = String.valueOf(extras.getInt("score")); 
    txt_result.setText(value); 
} 
+0

@ Amulya khare, я изменил код, как вы говорите, проверьте вопрос, но все еще не работает – user3006788

+0

@ user3006788 Вы изменили больше вещей, чем я спросил. Теперь у вас есть строка 'result', которая анализируется и все .. можете ли вы сделать то, что вы делали ранее, и посмотреть, работает ли она? измените обратно на 'i.putExtra (« оценка », 0);' и т. д. и т. д. –

+0

Кроме того, я скопировал и скомпилировал исходный код с моим решением .. работает как шарм :), поэтому, пожалуйста, убедитесь, что вы следите за тем, Я сказал очень внимательно –

0

Существует проблема здесь:

 Intent intent = new Intent(MainActivity.this, SecondPage.class); 
     intent.putExtra("showResult", result); 
     startActivity(intent); 

Это должно соответствовать extras.getString("score"); строку во второй деятельности,поэтому изменить его на:

 Intent intent = new Intent(MainActivity.this, SecondPage.class); 
     intent.putExtra("score", result); 
     startActivity(intent); 
+0

мой плохой я скопировал неправильный кусок кода сейчас я исправил см. Вопрос извините – user3006788

0

В вашем onClick(View v) обработчика v относится к кнопке btn_s, поэтому switch (v.getId()) не будет работать, так как v.getId() всегда возвращает идентификатор кнопки, т.е. R.id.btn_s.

Вы должны запросить состояния радиокнопки отдельно, например, использовать

if (rdS1.isChecked()) { 
    // first ratio button is checked 
} else if (rdS2.isChecked()) { 
    // second is checked 
} else if ... 

Заменить switch (v.getId()) в onClick(View v) с этим if.

+0

Игнорируйте мой оригинальный комментарий о создании 'RadioButton' final. Это не так, поскольку они являются членами вашей деятельности. – kiruwka

+0

, так что мне нужно делать, как вы говорите, мне нужно проверить, проверен ли radioButton ??? – user3006788

+0

внутри вашей 'onClick()' реализация, да – kiruwka

Смежные вопросы