我的Android应用程序中的旋转器有问题。我实施了两个微调器。两者都从json加载内容。第一个看起来像,
// Code for First spinner
loc = json.getJSONArray("location");
for(int i = 0; i < loc.length(); i++){
JSONObject c = loc.getJSONObject(i);
//put json obkject on variable
String l = c.getString("stock_location");
locationList.add(l);
// Set Spinner Adapter
location.setAdapter(new ArrayAdapter<String>OfferedDiesel.this,android.R.layout.simple_spinner_dropdown_item,locationList));
// Spinner on item click listener
location.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,View arg1, int position, long arg3) {
place = locationList.get(position);
selected = place;
new LoadProduct().execute();
product_title.setVisibility(View.VISIBLE);
product.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
place = null;
}
});
}
//Following is the LoadProduct
private class LoadProduct extends AsyncTask<String, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(OfferedDiesel.this);
pDialog.setMessage("Loading Product ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
}
@Override
protected JSONObject doInBackground(String... args) {
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.getProductFromLocation(selected);
return json;
}
protected void onPostExecute(JSONObject json) {
if(pDialog.isShowing()){
pDialog.dismiss();
}
// Locate the spinner in activity_main.xml
/*LOcate site node*/
try{
if(json.has("error_msg")){
String err = json.getString("error_msg");
alert.showAlertDialog(OfferedDiesel.this, "ALert !!", err, null);
}else{
prod = json.getJSONArray("product");
for(int i = 0; i < prod.length(); i++){
JSONObject d = prod.getJSONObject(i);
//put json obkject on variable
String k = d.getString("stock_name");
productList.add(k);
arrayAdapter = new ArrayAdapter<String>(OfferedDiesel.this,android.R.layout.simple_spinner_dropdown_item,productList);
// Set Spinner Adapter
product.setAdapter(arrayAdapter);
// Spinner on item click listener
product.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,View arg1, int position, long arg3) {
good = locationList.get(position);
//selected = place;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
place = null;
}
});
}
}
}catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}/*End of Spinner Populate*/
在这里,每当我在上面的微调器中选择一个新项目时,它将执行new LoadProduct().execute();
,在我的第二个微调器上,我将获取数据但是附加了日期。我的意思是,例如,如果通过我的第一个spiner上的defalt'1'然后在第二个微调器上我将得到“First”,当我选择'2'(在第一个微调器上更改)然后我将得到“Second”它附加在'First '因此我得到2个项目“第一个”和“第二个”而不是只有一个“第二个”。我现在需要在加载新的之前清除所有微调器列表。对于两个微调器,我使用json来加载数据。
提前谢谢。
答案 0 :(得分:0)
我会在这里对你要做的事情进行一些猜测,因为我并不是100%肯定我理解......这就是我认为你想要做的事情做:
ListView
s。AsyncTask
的{{1}}来实现。LoadProduct
用于selected
以确定要加载的内容。
好的,所以如果我就在这里,我会建议一些改变。
AsyncTask应该能够接受输入,没问题。
答案 1 :(得分:-1)
在向阵列添加新数据之前,您只需要使用clear方法清除数组列表,这样可以帮助您