Android: вызов диалога с помощью кнопки, встроенной в список - PullRequest
2 голосов
/ 10 декабря 2010

У меня есть собственный список, который содержит два TextViews и два Buttons. Я хочу, чтобы одна кнопка изменила данные, показанные в одной TextView, а другая button накачала Dialog, объясняя назначение этой строки. Поэтому мне нужно динамически обновлять содержимое Dialog. Насколько я могу судить, единственный способ наполнить интерактивную кнопку в списке - это setOnClickListener в адаптере, когда вы наполняете строку, но я не могу создать dialog вне activity ( Я получаю Force Close). Вот мой getView() звонок. Есть предложения?

public View getView(final int position, View convertView, ViewGroup parent) {

    final ViewHolder holder;

    if (convertView == null) {

        convertView=mInflater.inflate(R.layout.text_list_item,null);

        holder=new ViewHolder();
        holder.clear=(Button)convertView.findViewById(R.id.btnClr);
        holder.label=(TextView) convertView.findViewById(R.id.textListItemLabel);
        holder.value=(TextView) convertView.findViewById(R.id.textListItemValue);
        holder.info=(Button)convertView.findViewById(R.id.btnInfo);
        holder.group= (RadioGroup)convertView.findViewById(R.id.radiogroup);
        holder.r1=(RadioButton)convertView.findViewById(R.id.radio1);
        holder.r2=(RadioButton)convertView.findViewById(R.id.radio2);
        holder.t1=(ToggleButton)convertView.findViewById(R.id.toggle1);

        holder.clear.setOnClickListener(new OnClickListener(){
            private int pos= position;

            @Override
            public void onClick(View v){

                holder.value.setText(String.valueOf(pos));
                notifyDataSetChanged();//I know there's a problem on here, and I'm working on that... but at least it reacts to the button press.

            }
        });

        holder.info.setOnClickListener(new OnClickListener(){
            private int pos= position;
            @Override
            public void onClick(View v){
                Button button = (Button) v;

                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setMessage("Are you sure you want to display?");
                    .setCancelable(false)
                       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                                MyActivity.this.finish();
                           }
                       })
                       .setNegativeButton("No", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                           }
                       });
                builder.create();//Ok to here...
                builder.show();//Crash
                String.valueOf(pos), Toast.LENGTH_SHORT).show();
            }
        });
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    return convertView;
}

1 Ответ

1 голос
/ 20 июня 2011

Действие, в котором содержится адаптер, не может обработать свой собственный жизненный цикл - Activity.onPause(), когда есть запрос от содержащегося в нем объекта, такого как этот адаптер, для покрытия действия с помощью диалога.

Чтобы справиться с этим, переместите весь код AlertDialog в действие внутри нового метода, который будет вызываться нажатием кнопки.

Вы можете сделать это, заполнив аргумент атрибута android:onClick в определении кнопки xml названием метода, как упоминалось ранее.

как здесь: http://androidforbeginners.blogspot.com/2010/03/clicking-buttons-in-listview-row.html

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