ورود

View Full Version : spinner لیست های باز شونده



OMID_BNT
پنج شنبه 22 خرداد 1393, 13:50 عصر
لیست باز شونده رو هر ایتم که کلیک کردیم یه پیغام نمایش داده بشه
اگه تو یه لیست باز شونده چند تا ایتم باشه


مثلا ایتم a انتخاب بشه دوباره لیست رو باز کنیم رو ایتم a کلیک کنیم (a رو دوباره انتخاب کنیم ) تابع setOnItemSelectedListener اجرا نمیشه مگر این که اول ایتم دیگه ای انتخاب کنیم بعدن دو باره رو ایتم قبلی برگردیم


بزارید با یه مثال واضح تر توضیح بدم
ما یه برنامه داریم که لیست استان ها رو میگییره بعد متناسب با انتخاب هر استان ، شهرسنان هاش رو میزاره تو یه لیست باز شونده دیگه
اگه برای لیست باز شونده استان ها ما setOnItemSelectedListener رو تعریف کنیم با شروع برنامه و اتومات پر شدن لیست ، تابع setOnItemSelectedListener اجرا میشه ( الان ما یه شرط میزاریم که با انتخاب ما شهر های استان مورد نظر رو نمایش بده . به صورت اتومات لیست بازشونده شهر ستان ها اجرا نشه )
لیست استان ها پر شده ، استان تهران هم به عنوان استان اولش هست و به صورت اتومات اولش انتخاب شده ( ولی چون ما برنامه رو نگه داشتیم تا با انتخاب ما بقیه روند اجرا بشه لیست بازشونده شهرستان ها پر نمیشه) و اما اگه الان تهران رو انتخاب کنیم لیست بازشونده شهرستان ها پر نمیشه مگر این که اول استانی دیگه مثلا مشهد رو انتخاب کنیم دوباره تهران رو انتخاب کنیم تا لیست باز شونده شهرستان ها پر بشه


حتی اگه ما برنامه رو نگه نداریم اگر تهران برای بار اول انتخاب بشه برای بار دومم هم همون انتخاب بشه تابع setOnItemSelectedListener اجرا نمیشه

ممکنه راهنماییم کنید


و اما یه سوال فرعی گوشی که تاچ نباشه
تابع
setOnTouchListener
روش اجرا نمیشه بجاش باید
setOnClickListener
رو براش تعریف کنیم
اما این موضوع (setOnClickListener ) روی
spinner
نمیدونم چه طور فراخونی میشه


----------------------------------------------------
spinner = لیست های باز شونده (کمبو باکس)




ممنون میشم اگر کسی جوابم رو بده

parvizwpf
جمعه 23 خرداد 1393, 13:21 عصر
فکر کنم با این وجود منطق کار بهم نمیریزه. شما پیش فرض برای اولین بار همه اسپینرها رو خودتون پر کنید. در ضمن مثلا وقتی تهران دوباره انتخاب میشه تغییری توی کامبوهای بعدی هم اتفاق نمی افته پس نباید احتمالا مشکلی باشه.

poorman
جمعه 23 خرداد 1393, 13:47 عصر
از تابع setOnItemClickListener استفاده کنید ببینید این مشکلتون حل میشه یا نه

OMID_BNT
جمعه 23 خرداد 1393, 16:47 عصر
فکر کنم با این وجود منطق کار بهم نمیریزه. شما پیش فرض برای اولین بار همه اسپینرها رو خودتون پر کنید. در ضمن مثلا وقتی تهران دوباره انتخاب میشه تغییری توی کامبوهای بعدی هم اتفاق نمی افته پس نباید احتمالا مشکلی باشه.
نه منطق بهم میخوره شما فکر کنید تهران انتخاب شده دوباره لیست رو باز کنی و تهران رو انتخاب کنی برنامه شهر استان هاش رو نمایش نده باید اول استانی دیگه رو انتخاب کنی بعد دوباره تهران رو انتخاب کنی تا استان های تهران نمایش داده بشه

من با این قسمت که اول تهران رو از حالت انتخاب خارج کنیم (شهری دیگه رو انتخاب کنیم ) دوباره برگردیم رو تهران مشکل دارم .



از تابع setOnItemClickListener استفاده کنید ببینید این مشکلتون حل میشه یا نه

از این تابع استفاده کردم وفورس کلوز- ارور زیر رو بهم داد فکر کنم باید از این تابع داخل همون setOnItemSelectedListener اجرا بشه

چون یه کانستراکتورش اگه درست بگم اینه
// @Override
// public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
این قسمت یه چیزایی نوشته
(http://stackoverflow.com/questions/15064498/setonitemclicklistener-not-works-with-spinner)
ارور
06-13 17:13:32.952: E/AndroidRuntime(1783): at a.b.c.d.appa.ActivityMain.ostan(ActivityMain.java: 168)


06-13 17:13:32.952: E/AndroidRuntime(1783): at a.b.c.d.appa.ActivityMain$1.onItemSelected(Activit yMain.java:115)

OMID_BNT
جمعه 23 خرداد 1393, 17:50 عصر
نمونه پروژه


http://fo7144.persiangig.com/spinnertest1.zip/download




ببینید ما یه اسپینر داریم توش دو تا ایتم هست (one , tow) میخوایم با هر بار انتخاب هر ایتم پیغام نمایش داده بشه اما وقتی ما one رو انتخاب میکنیم (پیغام نمایش داده میشه ) اما وقتی دوباره one رو انتخاب میکنیم پیغام نمایش داده نمیشه باید ابتدا tow رو انتخاب کنیم (پیغام نمایش داده میشه ) دوباره one رو انتخاب کنیم تا پیغام نمایش داده بشه
---------------------------------
اگر اسپینر ما یه ایتم داشته باشه با همون بار اول انتخاب One پیغام نمایش داده میشه دوباره لیست رو باز کنیم one رو انتخاب کنیم پیغام نمایش داده نمیشه
این خط رو از تو سورس برداریم


item.add("tow");



---------------------------------


لینک کمکی جهت دانلود نمونه سورس


http://uplood.ir/Z8kA


http://uplod.ir/5m1jxf0wyrm5/spinnertest1.zip.htm


http://www.bia2up.ir/uploads/1402667364581.zip






کد به این شکله



ActivityMain.java




package a.b.c.d.Spinnertest1;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;


public class ActivityMain extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<String> item = new ArrayList<String>();
final Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);


item.add("one");
item.add("tow");


ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, item);
dataAdapter1.setDropDownViewResource(android.R.lay out.simple_spinner_dropdown_item);
spinner1.setAdapter(dataAdapter1);

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub


Toast.makeText(ActivityMain.this, "test", 2000).show();

}


@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}
});

}
}













main.xml






<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>

parvizwpf
شنبه 24 خرداد 1393, 01:03 صبح
اینجا توضیحاتی داده شده :
http://stackoverflow.com/questions/5335306/how-can-i-get-an-event-in-android-spinner-when-the-current-selected-item-is-sele