设置微调器选择的项目文本
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");
}
我有一个微调器(只有相关的代码部分)...
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");
}