رادیو گروپ(کمک)
سلام.من در viewpagerبرنامم یه radiogroupچهارتایی دارم که در برنامه setcheckedchangedبرای اون تعریف کردم و با دستور switch,caseگفتم که اگه رو اولی کلیک شد 1 امتیاز اگه رو دومی 2 امتیاز و ... امتیاز رو بریز تو متغیر score.
حالا مشکل من این جاست که تو هر پوزیشنی از ویوپیجر اگه چند بار رو رادیو گروپ ها کلیک کنم مقدار ها به جای این که جایگزین بشن روهم ریخته میشن.راهنمایی می کنید چه کدی بزنم تا تو هر پوزیشن مقدار scoreآخرین تغییر در وضعیت رادیو ها باشه؟
ممنون
package com.mehdi31075.youngThinker.app.TestRavanshenasi;
import java.util.ArrayList;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
public class AdapterImagePager extends PagerAdapter {
public ArrayList<String> questions,answers,results;
public static TextView txtQuestion,txtG1,txtG2,txtG3,txtG4, txtCurrentPage;
public static RadioGroup rdg;
public static Button btnResult;
SharedPreferences variables;
public static Editor editor;
public AdapterImagePager(ArrayList<String> questions,ArrayList<String> answers,ArrayList<String> results){
this.questions=questions;
this.answers=answers;
this.results=results;
}
@Override
public int getCount() {
return questions.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public Object instantiateItem(ViewGroup container , int position) {
View view = G.layoutInfalter.inflate(R.layout.sample, null);
txtQuestion =(TextView)view.findViewById(R.id.txtQuestion);
txtG1 =(TextView)view.findViewById(R.id.txtG1);
txtG2 =(TextView)view.findViewById(R.id.txtG2);
txtG3 =(TextView)view.findViewById(R.id.txtG3);
txtG4 =(TextView)view.findViewById(R.id.txtG4);
txtCurrentPage =(TextView)view.findViewById(R.id.txtCurrentPage);
rdg = (RadioGroup) view.findViewById(R.id.rdg);
btnResult = (Button)view.findViewById(R.id.btnResult);
rdg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.radio0:
G.score+=1;
break;
case R.id.radio1:
G.score+=2;
break;
case R.id.radio2:
G.score+=3;
break;
case R.id.radio3:
G.score+=4;
break;
}Log.i("log",""+ G.score+"");}
});
fontNumber();
txtQuestion.setText(questions.get(position));
txtG1.setText(answers.get((position*4)));
txtG2.setText(answers.get(((position*4)+1)));
txtG3.setText(answers.get(((position*4)+2)));
txtG4.setText(answers.get(((position*4)+3)));
txtCurrentPage.setText("تست شماره"+" "+(position+1)+" "+"از"+""+questions.size()+"تست.");
btnResult.setTypeface(G.rezvan);
if(position+1==questions.size()){
btnResult.setVisibility(view.VISIBLE);
txtCurrentPage.setVisibility(view.GONE);
}else{btnResult.setVisibility(view.GONE);
txtCurrentPage.setVisibility(view.VISIBLE);}
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
public static void fontNumber(){
if(ActivitySetting.txtNemoone==null){
txtG1.setTypeface(G.rezvan);
txtG2.setTypeface(G.rezvan);
txtG3.setTypeface(G.rezvan);
txtG4.setTypeface(G.rezvan);
txtQuestion.setTypeface(G.rezvan);
txtCurrentPage.setTypeface(G.rezvan);
}else{
txtQuestion.setTypeface(ActivitySetting.txtNemoone.getTypeface());
txtG1.setTypeface(ActivitySetting.txtNemoone.getTypeface());
txtG2.setTypeface(ActivitySetting.txtNemoone.getTypeface());
txtG3.setTypeface(ActivitySetting.txtNemoone.getTypeface());
txtG4.setTypeface(ActivitySetting.txtNemoone.getTypeface());
txtQuestion.setTypeface(ActivitySetting.txtNemoone.getTypeface());
txtCurrentPage.setTypeface(ActivitySetting.txtNemoone.getTypeface());
}
if(ActivitySetting.txtNemoone==null){
txtQuestion.setTextSize(15);
txtG1.setTextSize(15);
txtG2.setTextSize(15);
txtG3.setTextSize(15);
txtG4.setTextSize(15);
txtCurrentPage.setTextSize(15);
}else{
txtQuestion.setTextSize(ActivitySetting.txtNemoone.getTextSize());
txtG1.setTextSize(ActivitySetting.txtNemoone.getTextSize());
txtG2.setTextSize(ActivitySetting.txtNemoone.getTextSize());
txtG3.setTextSize(ActivitySetting.txtNemoone.getTextSize());
txtG4.setTextSize(ActivitySetting.txtNemoone.getTextSize());
txtCurrentPage.setTextSize(ActivitySetting.txtNemoone.getTextSize());
}
}
public void radioButtons(){
}
}
بهترین کار اینه که رادیو باتن هارو درون یه آرایه قرار بدی و بجای switch case که اینجا جواب نمیده از if elseif استفاده کنید
به اینصورت :
for (int i = 0; i < radioButtons.length; i++) { if (checkedId == radioButtons[0]) { G.score+=1; break; } else if (checkedId == radioButtons[1]) { G.score+=2; break; } else if (checkedId == radioButtons[2]) { G.score+=3; break; } else if (checkedId == radioButtons[3]) { G.score+=4; break; } }
radioButtons -> آرایه ای از رادیو باتن ها هستش !
یه روش هم بهتون یاد بدم که نیاز به کدنویسی نداشته باشه ؛
در محیط اکلیپس :
کل بلاک switch case ــی رو که نوشتی رو انتخاب کن بعد در محیط اکلیپس CTRL+1 رو بزن از کادری که باز میشه
گزینه 'Convert 'switch' to 'if-else رو انتخاب کن به همین راحتی switch case تبدیل به if-else میشه
در محیط اندروید استودیو :
کل بلاک switch case ــی رو که نوشتی رو انتخاب کن بعد ALT+ENTER رو بزن از کادری که باز میشه
گزینه 'Convert 'switch' to 'if-else رو انتخاب کن به همین راحتی switch case تبدیل به if-else میشه !
امیدوارم مشکلتون با این روش حل بشه !
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .