android - 设置微调器所选项目文本

标签 android android-spinner settext onitemselectedlistener

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

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

当选择一个项目时(即它说:“做东西”),我想设置/更改所选微调项目的文本。 (请注意,这与设置微调器位置(使用 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;
    }
}

最佳答案

Am I on the right track?

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

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

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

  • 手动执行此操作

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


更新#1

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

更新#2

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

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 类中声明接口(interface) OnItemSelectListener

关于android - 设置微调器所选项目文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668922/

相关文章:

android - 复制微调器的问题 - Android Studio

java - 如何在 Android 中跟踪有关 fragment 的信息

android - Onlistitemclick 不起作用

java - 使用 setIndexedQuery 获取索引数据,其中索引不是路径末尾

使用 USB 主机模式时的 Android 开发设置

java - HashMap 中的 ListAdapter

android - 微调器文字大小不改变?

java - setText 不适用

java - JLabel:手动设置PreferredSize,但在setText之后获取PreferredSize

android - 如何在 FragmentStatePagerAdapter 的 fragment 中动态设置 TextView 的文本