Имея 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;
}