Spinner 2数据填充不正确

时间:2016-09-07 11:44:08

标签: android

我正在尝试根据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);
    }
  }

3 个答案:

答案 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");

在将其他值添加到适配器之前调用此方法以确保它位于第一个位置