Установите значение для просмотра текста в упражнении - PullRequest
0 голосов
/ 11 августа 2011

При вызове события для операции я открыл 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 () вызывается вскоре после появления диалогового окна.

Может ли кто-нибудь мне помочь?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 11 августа 2011

Вы делаете кучу вещей неправильно здесь. Вы можете переместить updateUI() в onClick в своей Деятельности, что должно работать, но вот еще несколько вещей, о которых стоит подумать:

  1. Почему ваш AlertDialog.Builder находится в другом классе? Это нормально, если вы собираетесь расширить его с помощью некоторого дополнительного поведения и использовать его в других местах вашего приложения - если вы используете его только здесь, вы должны объявить его внутри своей деятельности.
  2. Почему ваш ItemMap.item статичен? Это дизайнерское решение?
0 голосов
/ 11 августа 2011

Имея 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;
}
0 голосов
/ 11 августа 2011

переместите updateUI () из MyActivity onClick () в onClick for Dialog.

@Override
public void onClick(DialogInterface dialog, int position) {
   ItemMap.item = items[position];
   updateUI();
   dialog.dismiss();

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...