Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 337
#1

Ошибка при открытии AlertDialog - Android

04.07.2013, 12:43. Просмотров 571. Ответов 5
Метки нет (Все метки)

Добрый день уважаемые форумчане и знатоки Android помогите с проблемкой....
Вот класс CustomListAdapter:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package in.wptrafficanalyzer.navigationtabdemo;
 
import java.util.List;
 
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.ContextThemeWrapper;
import android.view.Window;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
 
public class CustomListViewAdapter extends ArrayAdapter<RowItem> {
 
    Context context;
    protected Context resources;
    protected Handler mHandler;
 
    public CustomListViewAdapter(Context context, int resourceId,
            List<RowItem> items) {
        super(context, resourceId, items);
        this.context = context;
    }
 
    /*private view holder class*/
    private class ViewHolder {
        TextView txtTitle;
        TextView txtDesc;
        Button  Accept;
        Button Info;
    }
 
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        RowItem rowItem = getItem(position);
 
        LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item, null);
            holder = new ViewHolder();
            holder.txtDesc = (TextView) convertView.findViewById(R.id.fio);
            holder.txtTitle = (TextView) convertView.findViewById(R.id.zayavka);
            holder.Accept = (Button) convertView.findViewById(R.id.buttonOk);
            holder.Info = (Button) convertView.findViewById(R.id.buttonInfo);
            mHandler = new Handler();
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();
            holder.txtDesc.setText(rowItem.getDesc());
            holder.txtTitle.setText(rowItem.getTitle());
            holder.Info.setOnClickListener(new OnClickListener() {
            @Override           
            public void onClick(View arg0) {
                showSettingsDialog();               
            }
            
            private void showSettingsDialog() {
                final Dialog dialog = new Dialog(getContext(), R.style.AppBaseTheme);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(R.layout.info);
                TextView image1 = (TextView) dialog.findViewById(R.id.textView1);
                TextView image2 = (TextView) dialog.findViewById(R.id.textView2);
                TextView image3 = (TextView) dialog.findViewById(R.id.textView3);
                TextView image4 = (TextView) dialog.findViewById(R.id.textView4);
                TextView image5 = (TextView) dialog.findViewById(R.id.textView5);
                TextView image6 = (TextView) dialog.findViewById(R.id.textView6);
                image1.setText(MainActivity.nomer_zayavki.get(position));
                image2.setText(MainActivity.fio.get(position));
                image3.setText(MainActivity.dogovor.get(position));
                image4.setText(MainActivity.marka.get(position));
                image5.setText(MainActivity.address.get(position));
                image6.setText(MainActivity.usluga.get(position));
                dialog.setCancelable(true);
                dialog.show();
            }
                    
        });
            
         holder.Accept.setOnClickListener(new OnClickListener(){
 
            @Override
            public void onClick(View arg0) {
                   mHandler.post(new Runnable(){
                        public void run() {
                            ContextThemeWrapper cwx = new ContextThemeWrapper(context, R.style.AlertDialogCustom);
                            AlertDialog.Builder at = new AlertDialog.Builder(cwx);    
                            at.setTitle("Внимание");
                            at.setMessage("Вы действительно хотите принять заявку?");
                            at.setPositiveButton("Да", new DialogInterface.OnClickListener() 
                            { public void onClick(DialogInterface dialog, int id) 
                            {  
                                 // Если нажали то заявка попадает в активные заявки и отправляется запрос что заявка взята кем-то
                            }    
                            });
                            at.setNegativeButton("Отмена", new DialogInterface.OnClickListener() 
                            { public void onClick(DialogInterface dialog, int id) 
                            {  
                                 dialog.dismiss();
                            }    
                            });
                            at.show();
                            
                        }                                                          
                       });                  
            }            
         });      
        return convertView;
    }
 
}
Ну и соответсвенно при at.show(); выбивает с такой ошибкой: Unable to add window -- token null is not for an application

Что только не писал вместо context.. Ничего не работает. Само приложение построено с использованием Fragment.

Вот один из фрагментов на котором установлен данный адаптер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package in.wptrafficanalyzer.navigationtabdemo;
 
 
import java.util.ArrayList;
import java.util.List;
 
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
 
public class AndroidFragment extends ListFragment{
    
    List<RowItem> rowItems;
    String check;
    ListView listView;
    Button Accept;
        
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        
        View v = inflater.inflate(R.layout.android, container, false);
        Accept = (Button) v.findViewById(R.id.buttonOk);
        
        rowItems = new ArrayList<RowItem>();
        
        for (int i = 0; i < MainActivity.nomer_zayavki.size(); i++) {
            RowItem item = new RowItem(MainActivity.nomer_zayavki.get(i), MainActivity.fio.get(i));
            rowItems.add(item);
        }
 
        listView = (ListView) v.findViewById(android.R.id.list);
        CustomListViewAdapter adapter = new CustomListViewAdapter(getActivity().getBaseContext(), R.layout.list_item, rowItems);
        listView.setAdapter(adapter);
        
        return v;
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 12:43     Ошибка при открытии AlertDialog
Посмотрите здесь:

Android AlertDialog Error
Android Не показывается AlertDialog
Потоки и AlertDialog Android
Custom AlertDialog Android
AlertDialog Android
Android TextView а AlertDialog
Ошибка в открытии приложения на эмуляторе Android
Android Ошибка при открытии новой activity
Не работает AlertDialog Android
Android Spinner в AlertDialog
Android AlertDialog и RadioGroup
Ошибка при открытии проекта Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxtron
47 / 47 / 2
Регистрация: 17.11.2012
Сообщений: 225
Записей в блоге: 1
04.07.2013, 12:49     Ошибка при открытии AlertDialog #2
Эти варианты пробовали?
http://stackoverflow.com/questions/1...an-application
http://stackoverflow.com/questions/7...tion-exception
http://stackoverflow.com/questions/5...application-wi
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 337
04.07.2013, 13:16  [ТС]     Ошибка при открытии AlertDialog #3
Да я перед тем как сюда писать, весь StackOverFlow перелазил, но ничего похожего не нашел (

Добавлено через 16 минут
Во разобрался сам кажется, при работе с фрагментами надо делать вот так
Java
1
2
                            ContextThemeWrapper cwx = new ContextThemeWrapper(MainActivity.context, R.style.AlertDialogCustom);
                            AlertDialog.Builder at = new AlertDialog.Builder(cwx);
Предварительно в MainActivity надо объявитьublic static Context context; а потом в методе OnCreate написать context=this;
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.07.2013, 21:15     Ошибка при открытии AlertDialog #4
обычно пишу
Java
1
MainActivity.this
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 337
05.07.2013, 10:19  [ТС]     Ошибка при открытии AlertDialog #5
Я пробовал так писать, но ошибку выдавал, про MainActivity... А когда в MainActivity создал Context то нормально стало...
gang018
7 / 7 / 0
Регистрация: 30.06.2013
Сообщений: 18
06.07.2013, 14:55     Ошибка при открытии AlertDialog #6
при работе с диалоговыми окнами, обязательно необходимо указывать в качестве контекста именно Activity.
в данной ситуации не рекомендую использовать Context как static, потому что при пересоздании приложения можно запросто получить крэш (контекст вполне может быть не инициализирован, часто на этом сам спотыкался).
я бы сделал так: передал в адаптер параметром сам Fragment, а диалог затем бы инициализировал так:
Java
1
Builder(mFragment.getActivity());
Yandex
Объявления
06.07.2013, 14:55     Ошибка при открытии AlertDialog
Ответ Создать тему
Опции темы

Текущее время: 21:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru