【发布时间】:2020-04-13 03:11:17
【问题描述】:
我已经实现了一个 android spinner 小部件,当我添加一个具有固定字符串值的 arrayList 并将其设置为微调器适配器时,它工作正常,但是当涉及到动态获取数据(Web 服务)并通过 a 添加到微调器时for 循环它不起作用。在这两种情况下,数据都被填充到微调器到微调器,但在单击时无法从微调器中获取所选项目。
OrderRequestActivity 类
public class OrderRequestActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private LinearLayout itemLinear;
String token = "";
CategoryModel categoryModel;
Spinner spinner;
ArrayList<String> categoryDataArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.layout_order_request);
spinner = (Spinner) findViewById(R.id.spinner);
categoryDataArrayList = new ArrayList<String>();
token = CommonUtilities.getPreference(this,"token");
getCategoryWebService();
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter =
new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categoryDataArrayList);
// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
spinner.setOnItemSelectedListener(this);
Log.e("Token OrderRequest",token);
}
public void lookingItemClick(View v) {
Intent i = new Intent(OrderRequestActivity.this,OrderExchangeActivity.class);
startActivity(i);
}
private void getCategoryWebService(){
WebServiceController.getResponse("GET", OrderRequestActivity.this, "order/categories", null, true,token, new WebServiceController.VolleyCallback() {
@Override
public void onSuccess(String result) {
try {
Log.e("Response result",result);
categoryModel = new CategoryModel().response(result);
CommonUtilities.setPreference(OrderRequestActivity.this,"CategoryData",result);
for (int i=0;i<=categoryModel.getData().size();i++) {
categoryDataArrayList.add(categoryModel.getData().get(i).getCategoryName());
Log.e("CategoryName >> ",categoryModel.getData().get(i).getCategoryName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(String error) {
try {
Log.e("Response Error",error);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(parent.getContext(), "Selected: " + parent.getSelectedItem(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
【问题讨论】:
-
这是因为您在 onCreate() 中设置了适配器,而只是在 onSuccess() 中更改了 categoryDataArrayList。您需要将更改通知适配器。调用 adapter.notifyDataSetChanged()。这应该工作:)
-
@Prashant.J 我应该在 onSuccess 中设置适配器并只通知那里吗?
-
是的,这将完成工作:)
-
希望我已经回答了您的问题?我忘了添加它作为答案,我已经添加为评论:(
-
但是@Prashant.J 您提供的解决方案不起作用,伙计。通过这样做甚至无法点击微调器