user1583209
user1583209

Reputation: 1707

Set spinner selected item text

I have a spinner (only relevant parts of code)...

protected void onCreate(Bundle savedInstanceState) {

   Spinner to_spinner = (Spinner) findViewById(R.id.to_spinner);
   List<Unit> list = myDbHelper.getAllUnits();
   SpinnerUnitAdapter tUnitAdapter tUnitAdapter = new SpinnerUnitAdapter(this, android.R.layout.simple_spinner_item, list);

   to_spinner.setAdapter(tUnitAdapter);
   to_spinner.setOnItemSelectedListener(onItemSelectedListenerTo);
}

with an onItemSelectedListener

AdapterView.OnItemSelectedListener onItemSelectedListenerTo = new     AdapterView.OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view,
                               int position, long id) {

        // do stuff
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapter) {
    }
};

When an item is selected (i.e. where it says: "do stuff"), I would like to set/change the text of the selected spinner item. (Note that this is not the same as setting the spinner position (with setSelection()).

I was thinking of doing this with

tUnitAdapter.getView(position, ?, ?).setText("new text");

Am I on the right track? What to put as second ("convertView") and third ("parent") argument in getView. My spinner adapter looks like:

public class SpinnerUnitAdapter extends ArrayAdapter<Unit> {
     ...
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         TextView label = new TextView(mContext);
         label.setTextColor(Color.BLACK);                        
       label.setTextSize(mContext.getResources().getDimension(R.dimen.list_row_font_size));
         label.setGravity(Gravity.CENTER);
         label.setText(getItem(position).getName());

         return label;
    }
}

Upvotes: 2

Views: 4744

Answers (3)

frogatto
frogatto

Reputation: 29285

Am I on the right track?

No. You should do the following steps: (in the onItemSelected method)

  • Update your model (the array of items you passed to the adapter) so that the item at position index takes the new name.

  • Issue notifyDataSetChanged on the adapter object. Alternatively, you can do this manually by ((TextView) view).setText(new_name);

Note: In onItemSelected method, adapterView points to your spinner view and view points to the row view just selected.


UPDATE #1

public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
    ((TextView) view).setText("new name");
}

UPDATE #2

For this, you should use Java interface to implement a callback which is called once the dialog is closed.

public void onItemSelected(AdapterView<?> adapterView, final View view, int position, long id) {
    Dialog dialog = new MyDialog(context, new MyDialog.OnItemSelectListener(){
        @Override
        public void onItemSelected(String newName){
            ((TextView) view).setText(newName);
        }
    });
    dialog.show();
}

And declare interface OnItemSelectListener in your MyDialog class.

Upvotes: 2

user1583209
user1583209

Reputation: 1707

I think I found the solution. I can just do:

public void onItemSelected(AdapterView<?> adapterView, View view,
                               int position, long id) {
    TextView tv = (TextView) adapterView.getSelectedView();
    tv.setText("new text");
}

Upvotes: 0

Linh
Linh

Reputation: 60923

You can change the text of spinner when you click each item so you should implement onClickListener

public class SpinnerUnitAdapter extends ArrayAdapter<Unit> {
         ...
         @Override
         public View getView(int position, View convertView, ViewGroup parent) {
             TextView label = new TextView(mContext);
             ...
             label.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                  // change label text here
                  // label.setText(...);
                }
             });
             return label;
        }
    }

Hope this help

Upvotes: 0

Related Questions