我正在尝试根据spinner1项目选择加载spinner2数据。我的spinner1加载没有任何问题。我在spinner1中有两个类别。在spinner1上选择任何值之前,我的spinner2加载了第二个类别值。
编辑: 我现在意识到的一件事。我在spinner1(类别)中有2个值。当spinner1中没有选择任何内容时,spinner2将加载item2的值。如果我在spinner1中选择item1,它会正确加载。如果我在spinner1中选择item2,则spinner2中不会填充任何内容。由于我的暗示,我认为存在一些问题。
MainActivity中的最小spinner2部分
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
parent.getItemAtPosition(position).toString();
getSpinner2(id);
}
private void getSpinner2(Long id) {
MyRestClient.getForSpinner2(MainActivity.this, "MyRestService/product/"+id,
headers.toArray(new Header[headers.size()]), null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
ArrayList<String> spinnerArray2 = new ArrayList<String>();
final SpinnerAdapter2 spinnerAdapter2 = new SpinnerAdapter2(MainActivity.this, spinnerArray2);
for (int i = 0; i < response.length(); i++) {
try {
JSONObject c = response.getJSONObject(i);
String productArray = c.getString("product");
spinnerAdapter2.add(productArray);
}
catch (JSONException e) {
e.printStackTrace();
}
}
spinnerAdapter2.add("Select One");
spinner2.setAdapter(spinnerAdapter2);
spinner2.setSelection(spinnerAdapter2.getCount());
spinnerAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
我已经将它显示在spinneradapter2类
上@Override
public int getCount() {
int count = super.getCount();
return count > 0 ? count - 1 : count;
}
.
.
public View getView(int position, View convertView, ViewGroup parent) {
.
.
if (position == getCount()) {
viewHolder.product.setText("");
viewHolder.product.setHint(products);
} else {
viewHolder.product.setText(products);
}
}
答案 0 :(得分:0)
将所有元素添加到适配器后,请尝试spinnerAdapter2.notifyDataSetChanged();
。也许它会有所帮助。我想你应该把这些项添加到spinnerArray2然后使用这个对象创建适配器。
答案 1 :(得分:0)
修改强>
将spinner2.setOnItemSelectedListener(MainActivity.this);
放入spinner1 setOnItemSelectedListner。
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
parent.getItemAtPosition(position).toString();
spinner2.setOnItemSelectedListener(MainActivity.this);
Log.e("Position", ""+position);
if(position > 0){
getSpinner2(position);
} else {
Toast.makeText(getApplicationContext(), "Spinner oth postion is selected", Toast.LENGTH_SHORT).show();
}
}
答案 2 :(得分:0)
您需要知道onitemselected将在没有用户操作的情况下第一次被调用,并且由于您要添加提示,您应该检查该位置是否大于0,如果没有提示则是提示位置然后跳过零位检查
所以你的新选择就像
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position>0){
parent.getItemAtPosition(position).toString();
getSpinner2(position);
}
}
也
spinnerAdapter2.add("Select One");
在将其他值添加到适配器之前调用此方法以确保它位于第一个位置