选择的微调器项目不工作 Android
Spinner Item Selected not working Android
我已经实现了一个 android 微调器小部件,当我添加一个具有固定字符串值的 arrayList 并将其设置为微调器适配器时,它工作正常,但是当涉及到动态获取数据(网络服务)和通过 for 循环添加到微调器它不起作用。在这两种情况下,数据都被填充到微调器到微调器,但在单击它时无法从微调器获取所选项目。
OrderRequestActivity Class
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) {
}
}
您需要通知适配器列表数据已更改。使 dataAdapter
成为 class 成员
private ArrayAdapter<String> dataAdapter;
并在更新项目列表后在 onSuccess
中调用 dataAdapter.notifyDataSetChanged();
:
// NOTE: changed to i < size, not i <= size or you will get an array bounds exception
for (int i=0;i<categoryModel.getData().size();i++) {
categoryDataArrayList.add(categoryModel.getData().get(i).getCategoryName());
}
dataAdapter.notifyDataSetChanged();
我已经实现了一个 android 微调器小部件,当我添加一个具有固定字符串值的 arrayList 并将其设置为微调器适配器时,它工作正常,但是当涉及到动态获取数据(网络服务)和通过 for 循环添加到微调器它不起作用。在这两种情况下,数据都被填充到微调器到微调器,但在单击它时无法从微调器获取所选项目。
OrderRequestActivity Class
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) {
}
}
您需要通知适配器列表数据已更改。使 dataAdapter
成为 class 成员
private ArrayAdapter<String> dataAdapter;
并在更新项目列表后在 onSuccess
中调用 dataAdapter.notifyDataSetChanged();
:
// NOTE: changed to i < size, not i <= size or you will get an array bounds exception
for (int i=0;i<categoryModel.getData().size();i++) {
categoryDataArrayList.add(categoryModel.getData().get(i).getCategoryName());
}
dataAdapter.notifyDataSetChanged();