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

Fragment should provide a default constructor (a public constructor with no arguments) - Android

Войти
Регистрация
Восстановить пароль
 
zoleg
14 / 14 / 1
Регистрация: 10.01.2012
Сообщений: 105
28.08.2015, 13:52     Fragment should provide a default constructor (a public constructor with no arguments) #1
Все работало нормально в Эклипсе, но после переезда на Андроид Студио рвботает на эмуляторах, но при попытке создать релиз ругается на messageController, мол не хочет принимать значения, и предлагает использовать дефолтный конструктор.
Как оно вообще должно выглядеть. Подскажите (нубу в java), как оно должно быть написано.
Пока оно так:

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
public class loginActivity extends Activity implements OnClickListener, messageController.OnDismissListener {
    SharedPreferences sPref;
    Editor ed;
    CheckBox local;
    Bundle args;
    messageController msg;
    EditText login, pass;
    formController form;
    Button btnLogin;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        msg = new messageController(this);
        form = new formController(this);
        sPref = getSharedPreferences("monopoly", MODE_PRIVATE);// check monopoly
        setContentView(R.layout.local_login_activity);
        local = (CheckBox) findViewById(R.id.monopoly);
        local.setChecked(sPref.getBoolean("monopoly", false));
        login = (EditText) findViewById(R.id.editCallsign);
        pass = (EditText) findViewById(R.id.editPassword);
        btnLogin = (Button) findViewById(R.id.buttonLogin);
        btnLogin.setOnClickListener(this);
        super.onCreate(savedInstanceState);
    }
    @Override
    public void onClick(View v) {
        String userLogin, userPass;
        userLogin = login.getText().toString();
        userPass = pass.getText().toString();
        switch (v.getId()) {
            case R.id.buttonLogin:
                args = new Bundle();
                if (userLogin.isEmpty() | userPass.isEmpty()) { //проверяем пусты ли поля
                    args.putInt("type", 2); // put args (show dialog with one button "OK")
                    args.putInt("msg", 0); // put args (body message)
                    msg.setArguments(args);
                    msg.show(getFragmentManager(), "ema");
                    Log.w(getResources().getString(R.string.tag), "поля пусты");
                    break;
                }
                ed = sPref.edit(); //set mode monopoly
                ed.putBoolean("monopoly", local.isChecked());
                ed.commit();
                if (form.db.checkLogin(userLogin, userPass) != 0)
                    form.showForm(2, this, ""); //rewrite to startWork.class
                else {
                    // not exist user or invalid username an password
                    args.putInt("type", 2); // put args (show dialog with one button "OK")
                    args.putInt("msg", 1); // put args (body message)
                    msg.setArguments(args);
                    msg.show(getFragmentManager(), "ema");
                }
                break;
        }
    }
    @Override
    public void OnDismissListener(int res) {
        // TODO Auto-generated method stub
    }
}
А это то на что Студио ругается:

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
public class messageController extends DialogFragment implements OnClickListener {
    AlertDialog.Builder adb;//нативный компонент, показывающий окошки пользователю
    int type, msg;//type - тип окошка(с одной кнопкой или тремя), msg - сообщения для пользователя, хранится в String.xml
    private int res = -1;//необходим для вывода результата
    String[] message;//массив самих сообщений
    String tag;//используется для отладочной информации
    private OnDismissListener mCallback;//чтобы мы могли узнать, что выбрал пользователь
    private soundController sound;//контроллер звуков
    private Context context;//необходимый контекст для работы
    public messageController(Context cnt){
        sound = new soundController(cnt);
    }
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //tag = getResources().getString(R.string.tag);
        //message = getResources().getStringArray(R.array.msg);
        //get args
        super.onCreate(savedInstanceState);
        type = getArguments().getInt("type");//получем тип окошка (одна кнопка или три)
        msg = getArguments().getInt("msg");//получаем id сообщения, который хранится в String.xml
        //set title and body for message
        adb = new AlertDialog.Builder(getActivity())
                .setTitle(R.string.warning)//устанавливаем заголовок сообщения
                .setMessage(message[msg]);//устанавливаем тело сообщения
        switch(type){
            case 1:    //добавляем три кнопки для сообщения
                adb.setPositiveButton(R.string.yes, this)
                        .setNegativeButton(R.string.no, this)
                        .setNeutralButton(R.string.cancel, this);
                break;
            case 2:    //добавляем одну кнопку для сообщения
                adb.setPositiveButton(R.string.ok, this);
                break;
            default:
                break;
        }
        sound.play(1);//проигрываем звук
        return adb.create();//показываем само сообщение
    }
    @Override
    public void onClick(DialogInterface Dialog, int i) {//узнаем на какую кнопку нажал пользователь
        switch(i){
            case -1:
                res = 1;
                break;
            case -2:
                res = 2;
                break;
            case -3:
                res = 0;
                break;
            default:
                break;
        }
        mCallback.OnDismissListener(res);
        res = -1;
    }
    public interface OnDismissListener {//необходимо для работы
        public void OnDismissListener(int res);
    }
    @Override
    public void onAttach(Activity activity) {//необходимо для работы
        super.onAttach(activity);
        mCallback = (OnDismissListener) activity;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2015, 13:52     Fragment should provide a default constructor (a public constructor with no arguments)
Посмотрите здесь:

Android Fragment and context
Android Custom view . is missing constructor used by tools
findViewById и Fragment Android
Android Кликабельные Fragment
Call to super must be first statement in constructor Android
Make sure class name exists, is public, and has an empty constructor that is public Android
SwipeRefreshLayout + Fragment Android
Android MapFragment в Fragment
Android Reload Fragment
Вызов Fragment Android
Анимация Fragment Android
Fragment и ListView Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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