设置微调器选择的项目文本

Set spinner selected item text

我有一个微调器(只有相关的代码部分)...

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);
}

带有 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) {
    }
};

当一个项目被选中时(即它说:"do stuff"),我想 set/change 所选微调器项目的文本。 (请注意,这与设置微调器位置(使用 setSelection())不同

我想用

来做这件事
tUnitAdapter.getView(position, ?, ?).setText("new text");

我走在正确的轨道上吗?在 getView 中将什么作为第二个 ("convertView") 和第三个 ("parent") 参数。我的微调适配器看起来像:

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;
    }
}

您可以在单击每个项目时更改微调器的文本,因此您应该实现 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;
        }
    }

希望对您有所帮助

Am I on the right track?

没有。您应该执行以下步骤:(在 onItemSelected 方法中)

  • 更新您的模型(您传递给适配器的项目数组),以便 position 索引处的项目采用新名称。

  • 在适配器对象上发布 notifyDataSetChanged。或者,您可以通过 ((TextView) view).setText(new_name);

  • 手动执行此操作

注意:onItemSelected方法中,adapterView指向您的微调器视图,view指向刚刚选择的行视图。


更新 #1

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

更新#2

为此,您应该使用 Java 接口来实现在对话框关闭后调用的回调。

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();
}

并在 MyDialog class.

中声明接口 OnItemSelectListener

我想我找到了解决办法。我可以这样做:

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