2016-10-14 5 views
1

У меня есть Spinner со списком категорий, которые получают данные от JSON. Я хочу сделать, когда элемент, отличный от , будет выбран весь Категория, а другой счетчик подкатегории станет видимым и загрузится с данными из JSON в соответствии с его категорией.Нет ответа от getSelectedItem Spinner

Раньше мне это удалось, но, оставив его на несколько дней и выполнив другие части, он больше не работает.

Поскольку первая загружается в центрифуги является все Категория, это вызвало setOnItemSelectedListener() и спрятался subcategorySpinner. Если выбран другой элемент, subcategorySpinner все еще не отображается.

Есть ли что-то не так с логикой кода? Пожалуйста помоги.

categorySpinner = (Spinner) rootView.findViewById(R.id.categorySpinner); 
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.spinner_item, categoryList); 
adapter2.setDropDownViewResource(R.layout.spinner_dropdown_item); 
categorySpinner.setAdapter(adapter2); 

categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
categoryString = categorySpinner.getSelectedItem().toString().replace(" ", "%20"); 
if (categorySpinner.getSelectedItem().toString().equals("All Category")) { 
    Log.d("debug", "all category"); 
    subcategorySpinner.setVisibility(View.GONE); 
} else { 
    Log.d("debug", "other than all category"); 
    subcategorySpinner.setVisibility(View.VISIBLE); 
    generateSubcategorySpinner(Config.GET_SUBCATEGORY_URL+"?category="+categoryString); 
} 
} 


}); 
+0

Вы получили журнал? –

+0

@HRaval вы имеете в виду, прокомментируйте это? – August

+0

@SathishKumarJ Я получаю только журнал «все категории» – August

ответ

0

Ну, я не совсем понимаю, что я сделал логически, потому что это кажется совсем другим, но это решило его. О, ну ... что бы ни плавало на лодке, я думаю.

Используя предложение H Raval, я переместил if else в метод, и теперь он работает так, как я хотел.

categorySpinner = (Spinner) rootView.findViewById(R.id.categorySpinner); 
       ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.spinner_item, categoryList); 
       adapter2.setDropDownViewResource(R.layout.spinner_dropdown_item); 
       categorySpinner.setAdapter(adapter2); 
       String str = categorySpinner.getSelectedItem().toString(); 
       Log.d("debug", "str "+str); 

       categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
        @Override 
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
         categoryString = parent.getItemAtPosition(position).toString(); 
         Log.d("debug", categoryString+"..."+position); 

         subCategorySpinnerView(categoryString); 
        } 
       }); 

private void subCategorySpinnerView(String categoryString) { 

    if (categoryString.equals("All Category")) { 
     Log.d("debug", "all category"); 
     subcategorySpinner.setVisibility(View.GONE); 
    } else { 
     Log.d("debug", "other than all category"); 
     subcategorySpinner.setVisibility(View.VISIBLE); 

     categoryString = categoryString.replace(" ", "%20"); 
     generateSubcategorySpinner(Config.GET_SUBCATEGORY_URL+"?category="+categoryString); 
    } 

} 
0

Попробуйте этот код

Spinner dropdown = (Spinner) findViewById(R.id.type); 
final String[] items = new String[]{"SELECT TYPE OF OFFER","PERCENTAGE", "AMOUNT", "ITEM"}; 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.spinner_item, items); 
dropdown.setAdapter(adapter); 
String selectedItem = dropdown.getSelectedItem().toString(); 
0

попробовать этот

categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 


// On selecting a spinner item 
     categoryString = parent.getItemAtPosition(position).toString().replace(" ", "%20"); 



if (categoryString.equals("All Category")) { 
    Log.d("debug", "all category"); 
    subcategorySpinner.setVisibility(View.GONE); 
} else { 
    Log.d("debug", "other than all category"); 
    subcategorySpinner.setVisibility(View.VISIBLE); 
    generateSubcategorySpinner(Config.GET_SUBCATEGORY_URL+"?category="+categoryString); 
} 
} 
+0

выход все тот же – August

1

изменить код для

categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 


// On selecting a spinner item 
categoryString = parent.getItemAtPosition(position).toString(); 
Log.d("debug", categoryString+"..."+position); 

if (categoryString.equals("All Category")) { 
    Log.d("debug", "all category"); 
    subcategorySpinner.setVisibility(View.GONE); 
} else { 
    Log.d("debug", "other than all category"); 
    subcategorySpinner.setVisibility(View.VISIBLE); 

    categoryString = categoryString.replace(" ", "%20") 
    generateSubcategorySpinner(Config.GET_SUBCATEGORY_URL+"?category="+categoryString); 
} 
} 
+0

все тот же. это как если бы 'if else' не запускался снова после того, как выбранный элемент был выбран (не получил логин' else') – August

+0

, пожалуйста, запустите код выше и скажите мне, что вы получаете в журнале после изменения выбора –

+0

выход все тот же – August

0

Вы можете direcly использовать аргумент (позиция)

Вместо categoryString = parent.getItemAtPosition (position) .toString();

Вы можете использовать как: categoryString = position.toString();