在活动的事件调用中,我打开了一个AlertDialog.Builder,它列出了一个单选项的数组。当用户点击任何项目时,我想将其设置为活动中的文本视图。
I tried this:
Activity class:
public MyActivity extends Activity implements onClickListener {
TextView item;
public void onCreate(Bundle state) {
super.onCreate(savedState);
setContentView(R.layout.main);
item = (TextView) findViewById(R.id.id_item);
item .setOnClickListener(this);
}
public void onClick(View v) {
new MyBuilder(this).show();
updateUI();
}
private void updateUI() {
item.setText(ItemMap.item);
}
}
Builder class:
public class MyBuilder extends AlertDialog.Builder implements OnClickListener{
Context context;
String[] items = {"pen", "pencil", "ruler"};
public MyBuilder(Context context) {
super(context);
super.setTitle("Select Item");
this.context = context;
super.setSingleChoiceItems(items, 0, this);
}
@Override
public void onClick(DialogInterface dialog, int position) {
ItemMap.item = items[position];
dialog.dismiss();
}
}
Mapping class:
public class ItemMap {
public static String item;
}
这里,MyBuilder是一个扩展AlertDialog.Builder的子类 updateUI()尝试设置用户从项列表中选择的值。但它不起作用!显示对话框后立即调用updateUI()。
有人可以帮帮我吗?
提前致谢!
答案 0 :(得分:0)
将updateUI()从MyActivity onClick()移动到onClick for Dialog。
@Override
public void onClick(DialogInterface dialog, int position) {
ItemMap.item = items[position];
updateUI();
dialog.dismiss();
}
答案 1 :(得分:0)
你这里做错了。您可以将updateUI()
移动到您的活动中的onClick,这应该可以工作,但这里还有一些需要考虑的事情:
答案 2 :(得分:0)
在当前位置updateUI()
,您在ItemMap.item
中设置之前尝试访问AlertDialog.Builder
。您需要某种方式从onClick
中的AlertDialog.Builder
回调到您的主类 - 我会通过添加一个接口然后将其传递给您的构建器来执行此操作 - 如下所示:
活动类:
public MyActivity extends Activity implements onClickListener, AlertBuilderCallback {
TextView item;
public void onCreate(Bundle state) {
super.onCreate(savedState);
setContentView(R.layout.main);
item = (TextView) findViewById(R.id.id_item);
item .setOnClickListener(this);
}
public void onClick(View v) {
new MyBuilder(this).addCallback(this).show();
updateUI();
}
public void updateUI() {
item.setText(ItemMap.item);
}
}
AlertBuilderCallback接口:
public interface AlertBuilderCallback {
public void updateUI();
}
构建器类:
public class MyBuilder extends AlertDialog.Builder implements OnClickListener{
Context context;
String[] items = {"pen", "pencil", "ruler"};
public MyBuilder(Context context) {
super(context);
super.setTitle("Select Item");
this.context = context;
super.setSingleChoiceItems(items, 0, this);
}
public MyBuilder addCallback(AlertBuilderCallback callBack) {
this.callBack = callBack;
return this;
}
@Override
public void onClick(DialogInterface dialog, int position) {
ItemMap.item = items[position];
if(this.callBack != null) {
this.callBack.updateUI();
}
dialog.dismiss();
}
}
映射类:
public class ItemMap {
public static String item;
}