Android 在微调器中动态填充项时,setOnItemSelectedListener不工作
我想做的是:- 要在微调器中显示状态,请从数据库中加载并填充微调器。在选择状态下,根据状态,必须在另一个微调器中填充城市 我所取得的成就是: 微调器被数据库中的值填充,但Android 在微调器中动态填充项时,setOnItemSelectedListener不工作,android,android-spinner,Android,Android Spinner,我想做的是:- 要在微调器中显示状态,请从数据库中加载并填充微调器。在选择状态下,根据状态,必须在另一个微调器中填充城市 我所取得的成就是: 微调器被数据库中的值填充,但setOnItemSelectedListener不工作 setOnItemSelectedListener方法在静态地将数据放入微调器时起作用 我的消息来源: import java.util.ArrayList; import java.util.Iterator; import java.util.List; import
setOnItemSelectedListener
不工作
setOnItemSelectedListener
方法在静态地将数据放入微调器时起作用
我的消息来源:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
public class MainActivity extends Activity {
Spinner sp_state,sp_city,sp_area;
Button ok;
int state_position;
String s_data,c_data,a_data,selected_state;
ArrayList<Satae_Pojo> new_data;
Network_Class net=new Network_Class();
ArrayList<Satae_Pojo> state=new ArrayList<Satae_Pojo>();
ArrayList<Integer> state_id=new ArrayList<Integer>();
ArrayList<String> state_name=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.search_for_area);
sp_state=(Spinner)findViewById(R.id.spinner_state);
sp_city=(Spinner)findViewById(R.id.spinner_city);
sp_area=(Spinner)findViewById(R.id.spinner_area);
ok=(Button)findViewById(R.id.btn_ok);
List<String> list=new ArrayList<String>();
list.add("Please Select Area");
list.add("Phulewadi");
list.add("Vikramnagar");
list.add("Kadamwadi");
list.add("Rajarampuri");
getStates();
sp_state.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View arg1, int pos, long arg3)
{
System.out.println("This is spinner");
//String id=parent.getItemAtPosition(pos).toString();
//System.out.println("This is selected id "+id);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
});
ArrayAdapter<String> state_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, state_name);
state_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp_state.setAdapter(state_adapter);
}
public void getStates()
{
new Thread(new Runnable()
{
@Override
public void run()
{
s_data=net.getState();
ArrayList<Satae_Pojo> statedata = statepojo(s_data);
Iterator<Satae_Pojo> itr = statedata.iterator();
while(itr.hasNext())
{
Satae_Pojo s_pojo=(Satae_Pojo)itr.next();
int id=(Integer)s_pojo.getId();
String name=(String)s_pojo.getState();
state_id.add(id);
state_name.add(name);
}
}
}).start();
}
public ArrayList<Satae_Pojo> statepojo(String result)
{
ArrayList<Satae_Pojo> states=new ArrayList<Satae_Pojo>();
try
{
JSONArray jsonarray = new JSONArray(result);
for(int i=0; i<jsonarray.length(); i++)
{
JSONObject jsonobject=jsonarray.getJSONObject(i);
Satae_Pojo statepojo=new Satae_Pojo();
statepojo.setId(jsonobject.getInt("id"));
statepojo.setState(jsonobject.getString("s_name"));
states.add(statepojo);
}
}
catch(JSONException e)
{
Log.e("Log_tag", "Error Parsing in State....."+e.toString());
Log.e("Log_Answers","Second Error Parsing in State....."+result);
}
return states;
}
@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;
}
}
import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.os.Bundle;
导入android.app.Activity;
导入android.util.Log;
导入android.view.Menu;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.Spinner;
公共类MainActivity扩展了活动{
Spinner sp_州、sp_市、sp_区;
按钮ok;
int state_位置;
字符串s_数据、c_数据、a_数据、所选_状态;
ArrayList新的_数据;
Network_Class net=新网络_Class();
ArrayList状态=新的ArrayList();
ArrayList state_id=新的ArrayList();
ArrayList state_name=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.search_for_area);
sp_state=(微调器)findViewById(R.id.Spinner_state);
sp_city=(微调器)findViewById(R.id.Spinner_city);
sp_面积=(微调器)findViewById(R.id.Spinner_面积);
ok=(按钮)findViewById(R.id.btn\u ok);
列表=新的ArrayList();
列表。添加(“请选择区域”);
列表。添加(“普勒瓦迪”);
列表。添加(“Vikramnagar”);
列表。添加(“Kadamwadi”);
列表。添加(“Rajarampuri”);
getStates();
sp_state.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()
{
@凌驾
已选择公共位置(AdapterView父视图、视图arg1、内部位置、长arg3)
{
System.out.println(“这是微调器”);
//字符串id=parent.getItemAtPosition(pos.toString();
//System.out.println(“此为选定id”+id);
}
@凌驾
未选择的公共无效(AdapterView arg0){}
});
ArrayAdapter state_adapter=新的ArrayAdapter(这是android.R.layout.simple_微调器项,state_名称);
state_adapter.setDropDownViewResource(android.R.layout.simple_微调器_下拉列表_项);
sp_state.setAdapter(state_adapter);
}
公共状态()
{
新线程(newrunnable())
{
@凌驾
公开募捐
{
s_data=net.getState();
ArrayList statedata=statepojo(s_数据);
迭代器itr=statedata.Iterator();
while(itr.hasNext())
{
Satae_Pojo s_Pojo=(Satae_Pojo)itr.next();
int id=(整数)s_pojo.getId();
字符串名称=(字符串)s_pojo.getState();
状态标识添加(标识);
州名称。添加(名称);
}
}
}).start();
}
公共ArrayList statepojo(字符串结果)
{
ArrayList states=新的ArrayList();
尝试
{
JSONArray JSONArray=新JSONArray(结果);
对于(int i=0;i,无论何时向适配器(动态)添加数据,都需要调用adapter.notifyDataSetChanged()
,以便视图能够自行刷新
在getStates()方法的while循环之后添加此代码
runOnUiThread(new Runnable() {
@Override
public void run() {
state_adapter.notifyDataSetChanged();
}
});
Try String id=parent.getAdapter().getItem(pos).toString()我已经尝试过了…这不起作用。请参见下面的注释System.out.println(“这是微调器”);即使是这个System.out.println(“这是微调器”);也不要打印其中的值。你尝试过的是parent.getItemAtPosition(pos)我写的是parent.getAdapter().getItem(pos)抱歉,我试过了,但它不起作用。即使是第一个System.out.println(“这是spinner”)也要聚焦;未打印。它将如何转到下一行谢谢Bdy,但您能解释一下为什么会这样吗..为什么侦听器未打印消息。因为您没有侦听器的数据。这与侦听器无关,与您的数据集附加到视图(微调器)有关和适配器。在setAdapter之后如果您在数据集中进行了更改,则必须调用notifyDatesetChanged以使用可用的新数据刷新视图。伙计,您救了我的命,在添加适配器后完全工作。notifydatasetchanged