Spinner with sub-counter not working properly

I have two spinners , so my second counter changes the parameters that it can offer according to the element selected in the first counter. Easy?

Example: if I select 'a' in the main counter, the sub spinner should show the option 'a1'. If I select "b" in the main counter, the subparameter should display "b1", "b2" as parameters. If I select "c" in the main counter, the sub spinner should display "c1", "c2", "c3" as parameters.

I use a library called SearchableSpinner , but that doesn’t matter since it works the same way as Spinner Android.

public class PostComplaint extends AppCompatActivity {
    String[] problems_main = {"a","b","c"};
    String[][] problems_sub = {{"a1"},{"b1","b2"},{"c1","c2","c3"}};

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_complaint);

    spinner_main = (SearchableSpinner)findViewById(R.id.spinner_main);
    spinner_sub = (SearchableSpinner) findViewById(R.id.spinner_sub);

    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, problems_main);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_main.setAdapter(spinnerAdapter);
    spinnerAdapter.notifyDataSetChanged();

    spinner_main.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            setSubSpinner(position);
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            Toast.makeText(PostComplaint.this, "Nothing selected", Toast.LENGTH_SHORT).show();
        }
    });
}

void setSubSpinner(int i){
    String[] myArray = problems_sub[i]; //Note: problems_sub is a two dimensional array
    ArrayAdapter<String> spinnerAdapter_sub = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, myArray);
    spinnerAdapter_sub.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_sub.setAdapter(spinnerAdapter_sub);
    spinnerAdapter_sub.notifyDataSetChanged();
}

: , . , , .

. , .

+4
1

- SearchableSpinner:

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        ArrayAdapter adapter = (ArrayAdapter) getAdapter();

        if (null != adapter) {

            if (_items.size() == 0) {
                for (int i = 0; i < adapter.getCount(); i++) {
                    _items.add(adapter.getItem(i));
                }
            }
            SearchableListDialog searchableListDialog = SearchableListDialog.newInstance
                    (_items);
            searchableListDialog.setOnSearchableItemClickListener(this);
            searchableListDialog.show(((Activity) _context).getFragmentManager(), "TAG");
        }
    }
    return true;
}

if(_items.size() == 0) , , , , , . , , _item.size() , , , .

Android Spinner , .

:

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.toptoche.searchablespinnerlibrary.SearchableListDialog;

import java.util.ArrayList;
import java.util.List;

public class CustomSearchableSpinner extends Spinner implements View.OnTouchListener,
    SearchableListDialog.SearchableItem {

private Context _context;
private List _items;
private boolean isDataSetChanged;

public CustomSearchableSpinner(Context context) {
    super(context);
    this._context = context;
    this.isDataSetChanged = true;
    init();
}

public CustomSearchableSpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
    this._context = context;
    this.isDataSetChanged = true;
    init();
}

public CustomSearchableSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this._context = context;
    this.isDataSetChanged = true;
    init();
}

private void init() {
    _items = new ArrayList();
    setOnTouchListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        ArrayAdapter adapter = (ArrayAdapter) getAdapter();

        if (null != adapter) {

            if (isDataSetChanged) {
                if(_items.size() != 0) {
                    _items = new ArrayList();
                }
                for (int i = 0; i < adapter.getCount(); i++) {
                    _items.add(adapter.getItem(i));
                }
                isDataSetChanged = false;
            }
            SearchableListDialog searchableListDialog = SearchableListDialog.newInstance
                    (_items);
            searchableListDialog.setOnSearchableItemClickListener(this);
            searchableListDialog.show(((Activity) _context).getFragmentManager(), "TAG");
        }
    }
    return true;
}

@Override
public void onSearchableItemClicked(Object item, int position) {
    setSelection(_items.indexOf(item));
}

public void notifyDataChanged(Boolean hasDataChanged) {
    this.isDataSetChanged = hasDataChanged;
}
}

PostComplaint, CustomSearchableSpinner Searchable Spinner. , .

2

spinnerAdapter_sub.notifyDataChanged(true) spinnerAdapter_sub.notifyDataSetChanged();.

+1

All Articles