ورود

View Full Version : سوال در مورد Spinner



sina4everafter
شنبه 31 خرداد 1393, 14:17 عصر
سلام دوستان. ممنون میشم اگر راهنماییم کنید.


منبرنامه مبدل واحد ها رو دارم می نویسم. برنامه به این صورت است که وقتی که کاربر مثلا سانتی متر و انتخاب می کنه، مقدار ورودی و به واحد های دیگه تبدیل کنه و وقتی روی متر کلیک می کنه به واحد های دیگه تبدیل کنه.
مشکل من اینجاست که وقتی مثلا سانتی متر انتخاب شده و عدد و کاربر وارد می کنه و برنامه تبدیل می کنه، اگر در همین شرایط لیست اسپینر و باز کنه و روی گزینه مثلا متر کلیک کنه، دیگه نتیجه های محاسبه های قبلی و پاک نمی کنه. در صورتی که من کد و نوشتم.

if (itemSelected.equals("میلی متر")) {
textView_MM_Result.setText("");
String decimalFormatObjectToStringMMToMM = decimalFormatObject.format(calcNum * 1);
textView_MM_Result.setText(decimalFormatObjectToSt ringMMToMM);
}//---End Of MM

//---For CM---
else if (itemSelected.equals("سانتی متر")) {
textView_MM_Result.setText)("");
String decimalFormatObjectToStringCMToMM = decimalFormatObject.format(calcNum * 10);
textView_MM_Result.setText(decimalFormatObjectToSt ringCMToMM);

یا مثلا بجای اینکه پاک کنه همون مقدار و برای متر حساب کنه. در کل فقط باید مقدار وارد در EditText و پاک کنم و از اول بنویسم که حساب کنه. در غیر اینصورت هیچ کاری نمی کنه.
ممنون میشم اگر راهنماییم کنید.

parvizwpf
شنبه 31 خرداد 1393, 14:25 عصر
الان این ایف ها درست عمل میکنند؟ بهتره با ایندکس های آیتم های انتخابی ایف بنویسید. در ضمن شما اون رخداد مربوط به تغییر آیتم اسپینر رو فراموش نکرده اید؟

sina4everafter
شنبه 31 خرداد 1393, 14:40 عصر
بله دوست عزیز if ها درست کار می کنه. اصلا کلا برنامه اجرا میشه. ولی می خوام وقتی که مثلا سانتی متر و انتخاب کردم، جواب های مربوط به میلیمتر و پاک کنه. خط اول ایف ها اجرا نمیشه.

parvizwpf
شنبه 31 خرداد 1393, 14:46 عصر
شما چه نیازی به پاک کردن تکست دارید؟ شما دو حط بعد داری دوباره مقدار میدی بهش. setText مقدار قبلی رو از بین میبره. حالا دقیقا نمیدونم شما چه چیزی رو میخواید پاک کنید.

sina4everafter
شنبه 31 خرداد 1393, 14:52 عصر
بله. من دقیقا همین کار ومی خوام بکنم. ولی مقداره TextView ها تا زمانی که عدده وارد شده داخل EditText که کاربر وارد می کنه پاک نشه، عوض نمیشه. یعنی اگه اسپینر از س.م به متر عوض بشه باید حتما مقدار EditText پاک بشه و دوباره نوشته شه.این مشکله منه.

parvizwpf
شنبه 31 خرداد 1393, 14:57 عصر
اولا اگه تمام کد مربوط به اسپینر رو بگذارید بهتره. بنظرم اول رخداد تغییر آیتم اسپینر، تکست رو میتونید خالی کنید.

یعنی اگه اسپینر از س.م به متر عوض بشه باید حتما مقدار EditText پاک بشه و دوباره نوشته شه.
امکان پذیر نیست احتمالا جایی سوتی دارید میدید.

sina4everafter
شنبه 31 خرداد 1393, 15:03 عصر
من این برنامه رو با استفاده از TextWatcher نوشتم. یعنی همون لحظه ای که کاربر عدد و وارد می کنه، جواب شو داخل تکست ویو چاپمی کنه.
برنامه درست اجرا میشه.
شما چیزی به دهنتون نمی رسه راهنمایی کنید؟

parvizwpf
شنبه 31 خرداد 1393, 15:05 عصر
دوست عزیز خب چرا کد نمیدارید. تا کد رو نبینیم که نمیشه نظر بدیم. کد بگذارید ببینیم مشکل از کجاست

sina4everafter
شنبه 31 خرداد 1393, 15:12 عصر
//---oonItemSelectedClickListener---
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
itemSelected = spinnerObject.getSelectedItem().toString();
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {}//---End Of onItemSelectedClickListener

//---TextWatcher---
TextWatcher textWatcherObject = new TextWatcher() {

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {}

@Override
public void afterTextChanged(Editable s) {

//---Check EditText is empty or not---
eTextTrueOrFalse = TextUtils.isEmpty(eText_Input.getText());//---End

if (eTextTrueOrFalse == true) {
textView_MM_Result.setText("");
textView_CM_Result.setText("");
}else{
//---Use DecimalFormat---
DecimalFormat decimalFormatObject = new DecimalFormat("0.######");

//---Cast to double---
calcNum = Double.parseDouble(s.toString());

//---for MM---
if (itemSelected.equals("میلی متر")) {

String decimalFormatObjectToStringMMToMM = decimalFormatObject.format(calcNum * 1);
textView_MM_Result.setText(decimalFormatObjectToSt ringMMToMM);

}//---End Of MM
//---For CM---
else if (itemSelected.equals("سانتی متر")) {
textView_MM_Result.setText("");
String decimalFormatObjectToStringCMToMM = decimalFormatObject.format(calcNum * 10);
textView_MM_Result.setText(decimalFormatObjectToSt ringCMToMM);
}//---End Of CM

sina4everafter
شنبه 31 خرداد 1393, 15:21 عصر
مشکلم حل شد. باید کد ها رو خارج از TExwatcher می نوشتم.

parvizwpf
شنبه 31 خرداد 1393, 15:22 عصر
خداییش من منظورتون از این کد رو نمیدونم. اینجا on nothing selected چیکار قرار انجام بده؟ این وسط کده و من چیزی دستگیرم نشد از مفهوم کد. احساس میکنم لقمه رو چند بار چرخوندید.