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

Данные из DialogFragment в Activity - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
zxl2006
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 4
18.01.2015, 14:21     Данные из DialogFragment в Activity #1
Всем добрый день, помогите пож. советом. Программировать начал неделю назад поэтому вопрос думаю элементарный, но все-же...
Ниже приведен код Activity (ListView и кнопка вызова диалога) и DialogFragment (EditText и кнопка).
Надо при нажатии кнопки в DialogFragment передать текст из EditText в ListView, закрыть диалог чтобы при следующем вызове диалога EditText был пустой (для ввода след. значения).
Спасибо

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
package com.example.mz;
 
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
 
public class ActivityWork extends Activity implements OnClickListener {
    
    Button btnNewSTR;
    ListView lvWork;
    dialogadd dlg1;
    final String FILENAME = "works";
 
    @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.work);
        
        dlg1 = new dialogadd();
        btnNewSTR = (Button) findViewById(R.id.btnNewSTR);
        btnNewSTR.setOnClickListener(this);
        lvWork = (ListView) findViewById(R.id.lvWork);
 
             // Создаём пустой массив для хранения имен
        final ArrayList<String> works = new ArrayList<String>();
        works.add("Монтаж");
    // Создаём адаптер ArrayAdapter, чтобы привязать массив к ListView
        final ArrayAdapter<String> adapter;
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, works);
    // Привяжем массив через адаптер к ListView
        lvWork.setAdapter(adapter);
              }
    
         @Override
     public void onClick(View v) {
             dlg1.show(getFragmentManager(), "dlg1");
             }
}
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
package com.example.mz;
    
import android.app.DialogFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
 
public class dialogadd extends DialogFragment {
    
        EditText etAdd; 
  
 
  final String LOG_TAG = "myLogs";
 
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.dialogadd, null);
    
    Button button = (Button) v.findViewById(R.id.btnOk);
    button.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
          Log.d(LOG_TAG, "dialogadd: " + ((Button) v).getText());
          }
    });
    
    return v;
  }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
18.01.2015, 15:18     Данные из DialogFragment в Activity #2
Если неохота заморачиваться с Interface или BroadcastReceiver можно стукнуть активити прямо в лобешник в public void onClick(View v) кнопки

Java
1
2
3
4
((ActivityWork) this.getActivity()).works.add(etAdd.getText().toString());
((ActivityWork) this.getActivity()).adapter.notifyDataChanged();
 
this.dismiss();


Добавлено через 4 минуты
Просмотрел название класса....
zxl2006
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 4
18.01.2015, 15:21  [ТС]     Данные из DialogFragment в Activity #3
Сасибо, щас попробую...
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
18.01.2015, 15:33     Данные из DialogFragment в Activity #4
Не будет работать - я уже вижу...

Добавлено через 8 минут
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
public class dialogadd extends DialogFragment {
    
        EditText etAdd; 
  
 
  final String LOG_TAG = "myLogs";
 
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.dialogadd, null);
    
    Button button = (Button) v.findViewById(R.id.btnOk);
    button.setOnClickListener(this);
 
    etAdd = (EditText).v.findViewById(R.id.EDITTEXTID) // put proper resourse id for etAdd
       
    return v;
  }
 
   public void onClick(View v) {
          switch (v.getId()){
            case R.id.btnOk:
                        String tmpString = etAdd.getText().toString();
                        if (!tmpString.isEmpty()){
                              ((ActivityWork) this.getActivity()).works.add(tmpString);
                              ((ActivityWork) this.getActivity()).adapter.notifyDataChanged();
            }
            }
    this.dismiss();
   }
}
zxl2006
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 4
18.01.2015, 18:43  [ТС]     Данные из DialogFragment в Activity #5
Ничего не работает

Добавлено через 39 минут
Неужели у этой элементарной задачи нет простого, элегантного, короткого, лаконичного и красивого решения?

Добавлено через 2 часа 8 минут
Java
1
2
3
4
                        String tmpString = etAdd.getText().toString();
                        if (!tmpString.isEmpty()){
                              ((ActivityWork) this.getActivity()).works.add(tmpString);
                              ((ActivityWork) this.getActivity()).adapter.notifyDataChanged();
add и notifyDataChanged подчеркивает красным и пишет: The method notifyDataChanged() is undefined for the type Object
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
18.01.2015, 19:21     Данные из DialogFragment в Activity #6
Цитата Сообщение от zxl2006 Посмотреть сообщение
Ничего не работает...
The method notifyDataChanged() is undefined for the type Object
Ну, ведь можно посмотреть справку по адаптеру и понять, что такого метода не сществует, а существует notifyDataSetChanged().

Цитата Сообщение от zxl2006 Посмотреть сообщение
Неужели у этой элементарной задачи нет простого, элегантного, короткого, лаконичного и красивого решения?
В 2 строки - НЕТ.

Добавлено через 4 минуты
Правда и этот вариант работать не будет, пока источник данных и адаптер, оба глобального начения, объявляются локалными...

P.S. Каюсь, писал в спешке... Но в педагогических целях - отличній вариант...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2015, 23:40     Данные из DialogFragment в Activity
Еще ссылки по теме:

При открытии программы узнать данные, которые хранятся в второй форме Activity, не переходя на неё Android
Передать данные при клике на listview в другое activity Android
Android Как передать данные в Activity из другого класса
Особенности DialogFragment Android
Перемещение DialogFragment Android

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

Или воспользуйтесь поиском по форуму:
zxl2006
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 4
18.01.2015, 23:40  [ТС]     Данные из DialogFragment в Activity #7
Для меня глобальная, локальная, и ещёкакаянибудь переменная - мало значимые понятия, нет я примерно понимаю смысл, но все тонкости из высших сфер. Изучать андроид, и вообще программирование начал "вчера". Просто хочу шаг за шагом сделать приложение, чтобы облегчить свою повседневную работу. Читать учебники не моё - метод научного тыка, подсказки и осмысление примеров - это да. Щас начну чёто кудато вставлять, удалять, копировать и т.д. Может что-то и получится. А хотелось просто получить ответ на вопрос.

Добавлено через 3 часа 39 минут
Спасибо за ответы, все получилось.
Yandex
Объявления
18.01.2015, 23:40     Данные из DialogFragment в Activity
Ответ Создать тему
Опции темы

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