Выбранный элемент Spinner не работает Android - PullRequest
0 голосов
/ 12 апреля 2020

Я реализовал android виджет прядильщика, который работает нормально, когда я добавляю arrayList с фиксированными строковыми значениями и устанавливаю его в адаптер прядильщика, но когда дело доходит до получения данных динамически (веб-служба) и добавляется в прядильщик по л oop это не работает. В обоих случаях данные заполняются от счетчика до счетчика, но не могут получить выбранный элемент из счетчика при нажатии на него.

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) {

    }
}

1 Ответ

1 голос
/ 12 апреля 2020

Вам необходимо уведомить адаптер, что данные списка изменились. Сделайте dataAdapter членом класса

private ArrayAdapter<String> dataAdapter;

и вызовите dataAdapter.notifyDataSetChanged(); внутри onSuccess после обновления списка предметов:

// 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();
...