ورود

View Full Version : ComboBox (ویندوزی و یا وبی) در اندروید



ali_khodayar
دوشنبه 29 دی 1393, 08:12 صبح
با عرض سلام و خسته نباشید.
آیا آبجکتی توی اندروید هست که عملکرد آن مثل ComboBox در ویندوز اپلیکیشن و یا وب باشه. هم contentValue و هم DisplayValue داشته باشه یا یه چیزی شبیه این. برای ذخیره توی بانک اطلاعاتی میخوام یک تکست رو نشون بده اما هنگام ذخیره مقدار آن (کد) ذخیره بشه.

اگر هست لطفأ معرفی کنید . راهکاری هم اگر هست بفرمایید.

emaad_gh
دوشنبه 29 دی 1393, 09:29 صبح
با عرض سلام و خسته نباشید.
آیا آبجکتی توی اندروید هست که عملکرد آن مثل ComboBox در ویندوز اپلیکیشن و یا وب باشه. هم contentValue و هم DisplayValue داشته باشه یا یه چیزی شبیه این. برای ذخیره توی بانک اطلاعاتی میخوام یک تکست رو نشون بده اما هنگام ذخیره مقدار آن (کد) ذخیره بشه.

اگر هست لطفأ معرفی کنید . راهکاری هم اگر هست بفرمایید.

سلام، می توانید از Overflow menu استفاده کنید.

ali_khodayar
دوشنبه 29 دی 1393, 10:48 صبح
سلام، می توانید از Overflow menu استفاده کنید.

با تشکر. OverFlow Menu رو توی اینترنت گشتم خوبه اما دقیقأ اون چیزی که من میخوام نیست. من میخوام چند تا Radio Button باشن که هرکدوم یک کدی رو داشته باشن. کاربر هر کدوم رو انتخاب کرد و دخیره کرد کد اون Radio Button توی بانک ذخیره بشه. آبجکتی نیاز دارم که تکست و مقدارش رو بتونه از بانک بگیره.

emaad_gh
دوشنبه 29 دی 1393, 11:15 صبح
با تشکر. OverFlow Menu رو توی اینترنت گشتم خوبه اما دقیقأ اون چیزی که من میخوام نیست. من میخوام چند تا Radio Button باشن که هرکدوم یک کدی رو داشته باشن. کاربر هر کدوم رو انتخاب کرد و دخیره کرد کد اون Radio Button توی بانک ذخیره بشه. آبجکتی نیاز دارم که تکست و مقدارش رو بتونه از بانک بگیره.

الان شما می خواهید که یک مقداری رو نشان بده و یک مقدار مرتبط با اون رو توی بانک ذخیره کنه دیگه؟
من با PopUp Menu ابن کار رو انجام میدم :

PopupMenu popup = new PopupMenu(main.this, time_chooser); popup.getMenuInflater()
.inflate(R.menu.popup_time_menu, popup.getMenu());


popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {


public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.morning_item ) {
main_db.updateTime(name_,"صبح");
} else if (item.getItemId() == R.id.afternoon_item ) {
main_db.updateTime(name_,"ظهر");
} else if (item.getItemId() == R.id.evening_item ) {
main_db.updateTime(name_,"عصر");
} else if (item.getItemId() == R.id.night_item ) {
main_db.updateTime(name_,"شب");
}
return true;
}
});


popup.show();

الان در این مثال ، main نام اکتیویتی شما است، timechooser نام ویجتی است که popupmenu روش باز میشه. main_db هم نام دیتابیس است.
در پایین هم نمونه ای از ساخت منو برای استفاده در popupmenu:


<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/morning_item"
android:title="9:00"/>


<item
android:id="@+id/afternoon_item"
android:title="13:00"/>

<item
android:id="@+id/evening_item"
android:title="17:00"/>
<item
android:id="@+id/night_item"
android:title="20:00"/>
</menu>

gilas1368
دوشنبه 29 دی 1393, 11:51 صبح
نیازی به گشتن برای پیدا کردن library نداری
تو برای bind کردن اطلاعات به spinner نیاز به ی adapter داری
خب adapterات رو مطابق اون چیزی ک میخای میسازی باید textای ک باید نمایش بدی و idای ک اون text داره و bindاش میکنی به spinner
حالا زمانی ک ی آیتم رو از spinner انتخاب میکنی ی idای ک مطابق index خوده spinner هست بهت میده
فقط کافیه این id یا همون index رو توی adapterات search کنی و idای ک اون text انتخابی داره پیدا و ذخیره اش کنی

ali_khodayar
دوشنبه 29 دی 1393, 11:54 صبح
الان شما می خواهید که یک مقداری رو نشان بده و یک مقدار مرتبط با اون رو توی بانک ذخیره کنه دیگه؟
من با PopUp Menu ابن کار رو انجام میدم :

PopupMenu popup = new PopupMenu(main.this, time_chooser); popup.getMenuInflater()
.inflate(R.menu.popup_time_menu, popup.getMenu());


popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {


public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.morning_item ) {
main_db.updateTime(name_,"صبح");
} else if (item.getItemId() == R.id.afternoon_item ) {
main_db.updateTime(name_,"ظهر");
} else if (item.getItemId() == R.id.evening_item ) {
main_db.updateTime(name_,"عصر");
} else if (item.getItemId() == R.id.night_item ) {
main_db.updateTime(name_,"شب");
}
return true;
}
});


popup.show();

الان در این مثال ، main نام اکتیویتی شما است، timechooser نام ویجتی است که popupmenu روش باز میشه. main_db هم نام دیتابیس است.
در پایین هم نمونه ای از ساخت منو برای استفاده در popupmenu:


<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/morning_item"
android:title="9:00"/>


<item
android:id="@+id/afternoon_item"
android:title="13:00"/>

<item
android:id="@+id/evening_item"
android:title="17:00"/>
<item
android:id="@+id/night_item"
android:title="20:00"/>
</menu>

اگر امکانش هست یه توضیحی در مورد این کد بدهید. یکی اینکه این time_chooser چطوری به برنامه اضافه میشه و دومی اینکه در قسمت update این name_ چیست؟
ممنون

ali_khodayar
دوشنبه 29 دی 1393, 12:03 عصر
نیازی به گشتن برای پیدا کردن library نداری
تو برای bind کردن اطلاعات به spinner نیاز به ی adapter داری
خب adapterات رو مطابق اون چیزی ک میخای میسازی باید textای ک باید نمایش بدی و idای ک اون text داره و bindاش میکنی به spinner
حالا زمانی ک ی آیتم رو از spinner انتخاب میکنی ی idای ک مطابق index خوده spinner هست بهت میده
فقط کافیه این id یا همون index رو توی adapterات search کنی و idای ک اون text انتخابی داره پیدا و ذخیره اش کنی
ممنون از جوابتون. امکانش هست یه نمونه کد بزارین تا بهتر بتونم متوجه بشم؟؟ متوجه جوابتون شدم اما دقیق نمیدونم چطوری باید پیاده سازیش کنم.

emaad_gh
دوشنبه 29 دی 1393, 12:48 عصر
اگر امکانش هست یه توضیحی در مورد این کد بدهید. یکی اینکه این time_chooser چطوری به برنامه اضافه میشه و دومی اینکه در قسمت update این name_ چیست؟
ممنون
time_chooser اسم دلخواه یک ویجت هست و هر چیزی میتونه باشه مثل TextView یا Button که وقتی روش کلیک میشه این منو باز میشه. اون _name مهم نیست ، می خواستم بگم که اون فیلدایی که در دیتابیس دارای نام _name هستند رو آپدیت کنه.

ali_khodayar
دوشنبه 29 دی 1393, 15:28 عصر
time_chooser اسم دلخواه یک ویجت هست و هر چیزی میتونه باشه مثل TextView یا Button که وقتی روش کلیک میشه این منو باز میشه. اون _name مهم نیست ، می خواستم بگم که اون فیلدایی که در دیتابیس دارای نام _name هستند رو آپدیت کنه.

کدی که گذاشتین رو تست کردم جواب داد. اما بازهم دقیقأ اون چیزی که میخوام نیست. توی این حالت هر آیتم رو که انتخاب کنیم یک مقداری که توی کد تعریف کردیم ثبت میشود. یعنی اگر مشتری بخواهد یک آیتم جدید مثل نیمه شب تعریف کند باید آن را هم به کد اضافه کنیم. من میخوام برای هر مقدار یک کدی وجود داشته باشه (که این مقادیر در بانک هست). اگر روز رو انتخاب کرد کد 1 ذخیره شود اگر شب رو انتخاب کرد کد 3 ذخیره شود. و اگر هم ایتم جدیدی مثل نیمه شب با کد 5 اضافه کرد در صورت انتخاب کد 5 ذخیره شود.
درست مثل ComboBox در #C .

ali_khodayar
دوشنبه 29 دی 1393, 15:50 عصر
میخوام تمامی مقادیر Spinner از بانک پر بشه . و پشت هر ایتمی یک کدی باشه. که در صورت انتخاب هرکدام از این آیتم ها کد مربوط به آن را ذخیره کنیم.
دقیقأ مثل ComboBox.

Ebrahimkh
دوشنبه 29 دی 1393, 18:59 عصر
سلام
مقادیر رو از بانک اطلعاتی بخونید و در یک آرایه ذخیره کنید
بعد مقدار آرایه رو به ArrayAdapter پاس دهید
بعد با setAdapter
spinner رو مقدار دهی کنید

ali_khodayar
سه شنبه 30 دی 1393, 10:38 صبح
ممنون از همگی. با استفاده از همین راهی که دوستان معرفی کردن مشکل حل شد. اگر کسی این مشکل رو داره بگه تا کد رو بزارم.

Ebrahimkh
سه شنبه 30 دی 1393, 10:51 صبح
سلام علی جان بزاری بد نیست
شاید فردا اومدیم یکی به سورسش شما نیاز داشت :چشمک:

ali_khodayar
سه شنبه 30 دی 1393, 14:20 عصر
چشم ابراهیم جان .

Spinner spinner= (Spinner)findViewById(R.id.spinner1);
final List<String> textList= new ArrayList<String>();

final List<String> idList= new ArrayList<String>();

Cursor c= sh.getAllRemark();

for(int i=0; c.moveToNext();i++){
String caption= c.getString(c.getColumnIndex(P_RemarkTable.REM_CAP TION.toString()));
String id= c.getString(c.getColumnIndex(P_RemarkTable.REM_ID. toString()));
textList.add(caption);
idList.add(id);
}

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, textList);
spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

barrierID=Integer.parseInt(idList.get(i));
}


@Override
public void onNothingSelected(AdapterView<?> adapterView) {
// do nothing
}
});
این روش با دوتا لیست این کار رو انجام میده. یکی از لیست ها با عنوان"Title" پر میشه و دیگری با ایدی"ID" .
البته دنبال راهی هستم که این کار رو با یه لیست انجام بدم. تا حدی این کار رو انجام دادم اما مشکلش اینه که همیشه آخرین مقدار رو نمایش میده . برای این کار یه لیست از کلاسم ساختم که توی اون ID , Title رو اد کردم .
بازهم اگر سوالی در مودر کد بود جواب میدم.