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

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

Войти
Регистрация
Восстановить пароль
 
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 196
Завершенные тесты: 1
#1

Передать данные из диалога ListView родительскому Activity - Программирование Android

24.11.2015, 22:43. Просмотров 474. Ответов 9
Метки нет (Все метки)

Нашел код в котором создается диалоговое окно, в нем вводятся данные и эти данные передаются родителю.
Вот код:
res/layout/main.xml
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <Button
        android:id="@+id/buttonPrompt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Prompt Dialog" />
 
    <EditText
        android:id="@+id/editTextResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
    </EditText>
</LinearLayout>

res/layout/prompts.xml
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Type Your Message : "
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
    <EditText
        android:id="@+id/editTextDialogUserInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
        <requestFocus />
 
    </EditText>
</LinearLayout>

MainActivity.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
61
62
63
64
65
66
67
68
69
70
71
72
73
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
 
public class MainActivity extends Activity {
 
    final Context context = this;
    private Button button;
    private EditText result;
 
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // components from main.xml
        button = (Button) findViewById(R.id.buttonPrompt);
        result = (EditText) findViewById(R.id.editTextResult);
 
        // add button listener
        button.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
 
                // get prompts.xml view
                LayoutInflater li = LayoutInflater.from(context);
                View promptsView = li.inflate(R.layout.prompts, null);
 
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                        context);
 
                // set prompts.xml to alertdialog builder
                alertDialogBuilder.setView(promptsView);
 
                final EditText userInput = (EditText) promptsView
                        .findViewById(R.id.editTextDialogUserInput);
 
                // set dialog message
                alertDialogBuilder
                    .setCancelable(false)
                    .setPositiveButton("OK",
                      new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                        // get user input and set it to result
                        // edit text
                        result.setText(userInput.getText());
                        }
                      })
                    .setNegativeButton("Cancel",
                      new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                        dialog.cancel();
                        }
                      });
 
                // create alert dialog
                AlertDialog alertDialog = alertDialogBuilder.create();
 
                // show it
                alertDialog.show();
 
            }
        });
    }
}

Так вот у меня вопрос: если диалог сделать с ListView, как передать выбранный элемент в нем родительскому Activity
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 232
26.11.2015, 16:55     Передать данные из диалога ListView родительскому Activity #2
Можно так:
1) Создайте диалог на основе FragmentDialog

2) Создайте интефейс
Java
1
2
public interface ClickItemListListener{
        void setItem(int item);
3) В диалоге сделайте метод
Java
1
2
3
public void setClickItemListListener(MyActivity.ClickItemListListener listener){
this.listener = listener;
}
4) Вызовите setClickItemListListener из вашей активити
Java
1
2
3
4
5
6
dialog.setClickItemListListener(new ClickItemListListener() {
                        @Override
                        public void setItem(int item) {
                            //тут получайте ваш item
                        }
                    });
Внутри самого диалога получить id нажатого элемента списка и вызвать this.listener.setItem() думаю сможете.
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 196
Завершенные тесты: 1
27.11.2015, 23:49  [ТС]     Передать данные из диалога ListView родительскому Activity #3
Пока не понятно откуда у MyActivity возьмется ClickItemListListener даже если он реализует интерфейс ClickItemListListener :
Java
1
2
3
public void setClickItemListListener(MyActivity.ClickItemListListener listener){
this.listener = listener;
}
В активити у меня не видит метод setClickItemListListener из диалога:
Кликните здесь для просмотра всего текста
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
public class MainActivity extends AppCompatActivity  {
 
    DialogFragment mySelectedFile;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        mySelectedFile = new DialogFragmentFile();
 
    }
 
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSelectFile:
                mySelectedFile.setClickItemListListener(new ClickItemListListener() {
                    @Override
                    public void setItem(int item) {
                        //тут получайте ваш item
                    }
                });
                mySelectedFile.show(getFragmentManager(), "dlgFile");
                break;
            default:
                break;
        }
 
    }
}

класс диалога:
Кликните здесь для просмотра всего текста
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
public class DialogFragmentFile extends DialogFragment implements View.OnClickListener, ClickItemListListener {
 
    public ListView lvFile;
    ClickItemListListener listener;
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
        getDialog().setTitle("Выберите файл:");
        View v = inflater.inflate(R.layout.dialog_file, null);
        v.findViewById(R.id.btnYes).setOnClickListener(this);
        v.findViewById(R.id.btnCancel).setOnClickListener(this);
        lvFile =(ListView) v.findViewById(R.id.lvFile);
        return v;
    }
 
    @Override
    public void onClick(View v) {
        dismiss();
    }
 
    //Метод onDismiss срабатывает, когда диалог закрывается
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);
        //Log.d(LOG_TAG, "Dialog 1: onDismiss");
 
    }
 
    public void setClickItemListListener(ClickItemListListener listener){
        this.listener = listener;
    }
 
    @Override
    public void setItem(int item) {
 
    }
}

на всякий случай xml диалога:
Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="путь к файлу"
        android:id="@+id/tvPathFile" />
 
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
 
        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/lvFile" />
    </LinearLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="5">
 
        <Button
            android:id="@+id/btnYes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="@string/yes"
            android:layout_weight="1">
        </Button>
        <Button
            android:id="@+id/btnCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="@string/cancel"
            android:layout_weight="1">
        </Button>
 
    </LinearLayout>
 
</LinearLayout>

И еще не понятно как заполнить в DialogFragment список ListView?
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 232
28.11.2015, 00:15     Передать данные из диалога ListView родительскому Activity #4
Цитата Сообщение от Worldmen Посмотреть сообщение
MyActivity.ClickItemListListener
Означает, что интерфейс ClickItemListListener описан в файле MyActivity. Хотите можете в отдельный файл вынести - тогда будет просто
Java
1
2
3
public void setClickItemListListener(ClickItemListListener listener){
this.listener = listener;
}
Имплиментировать ClickItemListListener в диалоге не надо - вы уже в диалог передали экземпляр ClickItemListListener через метод setClickItemListListener.
Вам нужно на listView повесить OnItemClickListener и в методе onItemClick вызывать setItem(int item).
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 196
Завершенные тесты: 1
28.11.2015, 00:50  [ТС]     Передать данные из диалога ListView родительскому Activity #5
не все понял, по порядку:
интерфейс описан отдельно
Java
1
2
3
public interface ClickItemListListener {
    void setItem(int item);
}
а в активити так и не видит (строка 17) setClickItemListListener:
Кликните здесь для просмотра всего текста
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
public class MainActivity extends AppCompatActivity implements ClickItemListListener {
 
    DialogFragment mySelectedFile;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        mySelectedFile = new DialogFragmentFile();
    }
 
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSelectFile:
                // тут не видит setClickItemListListener
                mySelectedFile.setClickItemListListener(new ClickItemListListener() {
                    @Override
                    public void setItem(int item) {
                        //тут получайте ваш item
 
                    }
                });
                mySelectedFile.show(getFragmentManager(), "dlgFile");
                break;
            default:
                break;
        }
    }
 
    @Override
    public void setItem(int item) {
 
    }
}

я не понял откуда он возьмется, в интерфейсе ClickItemListListener его нет.
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 232
28.11.2015, 00:59     Передать данные из диалога ListView родительскому Activity #6
Цитата Сообщение от Worldmen Посмотреть сообщение
а в активити так и не видит (строка 17) setClickItemListListener:
Цитата Сообщение от Worldmen Посмотреть сообщение
DialogFragment mySelectedFile;
Сделайте так
Java
1
DialogFragmentFile mySelectedFile;
Цитата Сообщение от Worldmen Посмотреть сообщение
я не понял откуда он возьмется, в интерфейсе ClickItemListListener его нет.
Чего в нем нет?
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 196
Завершенные тесты: 1
28.11.2015, 17:46  [ТС]     Передать данные из диалога ListView родительскому Activity #7
Может вместо:
Java
1
2
3
4
5
6
dialog.setClickItemListListener(new ClickItemListListener() {
                        @Override
                        public void setItem(int item) {
                            //тут получайте ваш item
                        }
                    });
вы имели ввиду такую конструкцию:
Java
1
mySelectedFile.lvFile.setOnItemClickListener();
потому что я не знаю что такое setClickItemListListener (я еще новичок в андроиде).
я на всякий случай загрузил архив с основными файлами проекта.
во фрагменте это
Java
1
 public ListView lvFile;
Вложения
Тип файла: zip main.zip (36.1 Кб, 4 просмотров)
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 232
29.11.2015, 23:13     Передать данные из диалога ListView родительскому Activity #8
Цитата Сообщение от Worldmen Посмотреть сообщение
потому что я не знаю что такое setClickItemListListener (я еще новичок в андроиде).
Я же в первом своем посте написал что такое setClickItemListListener.
Цитата Сообщение от Worldmen Посмотреть сообщение
вы имели ввиду такую конструкцию:
Нужно реализовать обе эти конструкции.

Цитата Сообщение от Worldmen Посмотреть сообщение
mySelectedFile.lvFile.setOnItemClickListener();
lvFile сделайте private. setOnItemClickListener вызывайте непосредственно в DialogFragmentFile.
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 196
Завершенные тесты: 1
29.11.2015, 23:18  [ТС]     Передать данные из диалога ListView родительскому Activity #9
Цитата Сообщение от Hank Посмотреть сообщение
Я же в первом своем посте написал что такое setClickItemListListener.
вот вы написали:
Java
1
2
3
4
5
6
dialog.setClickItemListListener(new ClickItemListListener() {
                        @Override
                        public void setItem(int item) {
                            //тут получайте ваш item
                        }
                    });
У меня в редакторе Android Studio не видит этот метод, и я то же не понимаю откуда он возьмется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2015, 23:22     Передать данные из диалога ListView родительскому Activity
Еще ссылки по теме:
Android Как динамически заполнять ListView из другой activity?
Android Восстановление позиции ListView по возвращении из другого Activity
Android Как вместо названия Activity подставить элемент ListView?
Вызвать из ListView новое Activity (где задействован SimpleAdapter) Android
Android Передать массив в другую Activity

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

Или воспользуйтесь поиском по форуму:
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 232
29.11.2015, 23:22     Передать данные из диалога ListView родительскому Activity #10
Ну блин! Чтобы что-то вызвать, нужно это что-то создать.
В моем первом посте почитайте пункт 3.
Вы не создали этот метод.
Yandex
Объявления
29.11.2015, 23:22     Передать данные из диалога ListView родительскому Activity
Ответ Создать тему
Опции темы

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