Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 347
#1

Ошибка при использовании класса реализующего OnClickListener

30.04.2017, 01:02. Просмотров 238. Ответов 6
Метки нет (Все метки)

Добрый день.
Создал свой листенер:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SaveHistoryBtnListener implements View.OnClickListener {
    private DataBase dataBase;
    private HistoryItem historyItem;
 
    public SaveHistoryBtnListener(DataBase dataBase, HistoryItem historyItem) {
        this.dataBase = dataBase;
        this.historyItem = historyItem;
    }
 
    @Override
    public void onClick(View v) {
        dataBase.addHistoryItem(historyItem);
        Log.d("[fuck",historyItem.toString());
    }
}
в main в онкреейт:
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
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        dataBase = new DataBase(this);
        dataBase.open(); // здесь база SQLLite заводится, она точно работает
 
        btnFavorite = (Button) findViewById(R.id.bntFavorite);
        btnHistory = (Button) findViewById(R.id.btnHistory);
 
        editText = (EditText) findViewById(R.id.editText);
        translateText = (TextView) findViewById(R.id.translateText);
 
        spinerFrom = (Spinner) findViewById(R.id.spinner1);
        spinerTo = (Spinner) findViewById(R.id.spinner2);
 
        floatingActionButton = (FloatingActionButton) findViewById(R.id.fabAddBtn);
       floatingActionButton.setOnClickListener(new SaveHistoryBtnListener(dataBase, getHistoryItemFromActivity())); //здесь какая   //     то трабла с вызовомgetHistoryItemFromActivity()  
// здсеь еще код
 
}
 
  public HistoryItem getHistoryItemFromActivity() {
        HistoryItem historyItem = new HistoryItem();
        historyItem.setSearchWord(editText.getText().toString());
        Log.d("текст ", editText.getText().toString());
        historyItem.setSearchLang(langFrom);
        historyItem.setTranslatedWord(translateText.getText().toString());
        historyItem.setTranslatedLang(langTo);
 
        return historyItem;
    }
если написать через метод в мейн :
Java
1
2
3
4
5
6
 floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dataBase.addHistoryItem(getHistoryItemFromActivity());
            }
        });
то все работает. что я не так делаю?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2017, 01:02
Ответы с готовыми решениями:

Ошибка при использовании метода 1 класса во 2 классе
public LinearLayout LayoutOfScroll; public EditText edBudget; public TextView...

Ошибка при использовании фонарика
У меня есть фонарик в приложении, реализованный с помощью Switch. При...

Ошибка при использовании action bar sherlock
Всем привет, недавно достался проект с action bar sherlock, нужно добавить...

Ошибка присвоения Событие на кнопку при использовании Fragment
Пытаюсь идти по схеме предложенной компилятором, через вставку на основную...

Ошибка при создании класса
Помогите пожалуйста найти решение проблемы. При создании SQLOpenHelper класса...

6
vxg
Модератор
3236 / 2040 / 319
Регистрация: 13.01.2012
Сообщений: 7,898
30.04.2017, 07:41 #2
werrt, лог где или ошибка?
0
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 347
30.04.2017, 13:56  [ТС] #3
vxg,
ошибки нет. просто метод getHistoryItemFromActivity()
выполняется сразу при создании мейн на строке
floatingActionButton.setOnClickListener(new SaveHistoryBtnListener(dataBase, getHistoryItemFromActivity()));

я думал он вызовется по клику, а все не так.

как сделать чтоб получить доступ к кнопками из своего кликлистенера?
0
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 347
02.05.2017, 03:22  [ТС] #4
В общем передал активити в листенер, и уже в листенере дополнительно получаю вьюшки и беру с них текст. не знаю правильно ли так?
Java
1
 floatingActionButton.setOnClickListener(new SaveHistoryBtnListener(dataBase, this));
0
demixdn
296 / 243 / 74
Регистрация: 31.10.2016
Сообщений: 590
02.05.2017, 11:12 #5
werrt, так можно делать, но очень осторожно.
Вы туда именно Activity передаете? Если да, то возможно вам тогда не нужно туда передавать dataBase, его можно там создать, если оно больше нигде не используется в activity. И еще замечание: для создания базы данных лучше использовать getApplicationContext() вместо контекста activity.
1
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 347
02.05.2017, 13:06  [ТС] #6
demixdn, спасибо, не совсем понял по поводу " для создания базы данных лучше использовать getApplicationContext() вместо контекста activity."
0
demixdn
296 / 243 / 74
Регистрация: 31.10.2016
Сообщений: 590
02.05.2017, 15:12 #7
Цитата Сообщение от werrt Посмотреть сообщение
dataBase = new DataBase(this);
Java
1
dataBase = new DataBase(getApplicationContext());
1
02.05.2017, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2017, 15:12

Ошибка приложения при вызове startActivity из другого класса
Возникла проблема, программа валится при вызове метода enableBt() Класс со...

Ошибка при конвертации класса Activity в Fragment (SherlockFragment)
есть такой класс public class MainActivity extends Activity { ...

Ошибка при сборке проекта после переименования класса
Всем доброго времени суток!Мне нужна помощь в создании приложений на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru