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

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

Войти
Регистрация
Восстановить пароль
 
Zul-ya
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
#1

Передать данные из fragment в активити - Программирование Android

24.03.2016, 13:27. Просмотров 498. Ответов 13
Метки нет (Все метки)

Здравствуйте, Мне необходимо передать данные из фрагмента в активити, если подскажете буду благодарна.
во фрагменте есть несколько EditView, мне необходимо передать данные в активити, чтобы в дальнейшем передать и сохранить в бд.
Активити
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
public class UserData2Activity extends AppCompatActivity  {
 
    final String LOG = "UserData2Activity";
    Toolbar toolbar;
    TabLayout tabLayout;
    ViewPager viewPager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_data2);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);
 
        tabLayout = (TabLayout) findViewById(R.id.tablayout);
        tabLayout.setupWithViewPager(viewPager);
 
    }
 
    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new FragmentData(), "Данные1");
        adapter.addFragment(new FragmentData2(), "Данные2");
        adapter.addFragment(new FragmentData3(), "Данные3");
        adapter.addFragment(new FragmentData4(), "Данные4");
        viewPager.setAdapter(adapter);
    }
 
 
}
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
43
44
45
46
47
48
49
50
51
52
53
54
public class FragmentData extends Fragment {
 
    EditText editName1, editName2, editName3, editAll1, editAll2, editAll3;
    Button btnDataSave, btnDataCam, btnDataFile;
    final String LOG_TAG = "FragmentData";
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
 
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragmentdata, container, false);
 
        editName1 = (EditText) v.findViewById(R.id.editName1);
        editName2 = (EditText) v.findViewById(R.id.editName2);
        editName3 = (EditText) v.findViewById(R.id.editName3);
        editAll1 = (EditText) v.findViewById(R.id.editAll1);
        editAll2 = (EditText) v.findViewById(R.id.editAll2);
        editAll3 = (EditText) v.findViewById(R.id.editAll3);
 
        btnDataSave = (Button)  v.findViewById(R.id.btnDataSave);
        btnDataCam = (Button) v.findViewById(R.id.btnDataCam);
        btnDataFile = (Button) v.findViewById(R.id.btnDataFile);
        btnDataSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(LOG_TAG, "Button Save");
            }
        });
 
        btnDataCam.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(LOG_TAG, "Button Cam");
            }
            });
 
        btnDataFile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(LOG_TAG, "Button File");
              
            }
        });
        return v;
    }
 
}
fragmentdata
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
52
53
54
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/userDText" />
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editName1"
        android:hint="@string/editName1"/>
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/editName2"
        android:id="@+id/editName2" />
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/editName3"
        android:id="@+id/editName3" />
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="date"
        android:maxEms="8"
        android:id="@+id/editAll1"
        android:hint="Дата рождения"/>
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:id="@+id/editAll2"
        android:hint="Электронная почта"/>
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/editAll3"
        android:hint="Телефон"/>
 
    <include layout="@layout/bottom" />
</LinearLayout>
При нажатии на кнопки в логах все определяется, только как теперь вывести и определить EditView в активити?
EditText editName1, editName2, editName3, editAll1, editAll2, editAll3 ?

С дальнейшей записью в бд проблем не возникает, я записываю из обычных активити, а вот с фрагментами первый раз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2016, 13:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать данные из fragment в активити (Программирование Android):

Передать данные из фрагмента в Dialog Fragment - Программирование Android
Всем привет. У меня вопрос: Как в диалогФрагмент передать данные из фрагмента. Нужно передать позицию выбранного элемента gridViev, и в...

Передать данные в активити - Программирование Android
Здравствуйте, такой вопрос: есть несколько активити с данными и ещё одно активити,в которое нужно передать данные из всех прошлых. Как это...

Передать данные между активити через SharedPreferences - Программирование Android
Ребята помогайте начинающему, в общем есть два активити, из одного активити нужно передать с помощью SharedPreferences данные в другое...

Передать SearchView из активити во фрагмент - Программирование Android
У меня есть SearchView в активити и тесть фрагмент который запускается через транзакцию. И как мне правильно передать SearchView из...

Передать параметр из одной активити в другую - Программирование Android
Всем привет, дорогие форумчане! Прошлый раз мне любезно помогли здесь, мне понравилось. Так что снова обращаюсь за помощью.:D Есть...

Как передать целочисленную переменную и картинку из сервиса в активити? - Программирование Android
Как передать целочисленную переменную и картинку из сервиса в активити?

13
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
24.03.2016, 13:35 #2
Zul-ya,

В активити:
////
Java
1
2
public void fromFragmentData(Object data) {
}
Во фрагменте:

Java
1
2
3
4
Activity activity = getActivity();
if (activity != null && !activity.isFinishing() && activity instanceof UserData2Activity) {
    ((UserData2Activity) activity).fromFragmentData(....);
}
1
Zul-ya
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 14:27  [ТС] #3
YuraAAA, я немного не поняла, после создания fromFragmentData, передаем данные как? не судите строго я только учусь и хочу понять) что-то примеров не нашла подобных или не так искала((
0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
24.03.2016, 14:38 #4
Zul-ya, суть в том, что из фрагмента можно передать данные в активити используя ссылку на активити. Она доступна через метод getActivity().
Соответственно, когда Вам надо передать данные из фрагмента, можно этим пользоваться.
Допустим, надо передать строку в активити из фрагмента.

1. Во фрагменте делаем метод:

Java
1
2
3
4
5
6
public void toActivity(String data) {
    Activity activity = getActivity();
    if (activity != null && !activity.isFinishing() && activity instanceof UserData2Activity) {
        ((UserData2Activity) activity).fromFragmentData(data);
    }
}
2. В UserData2Activity надо добавить метод:

Java
1
2
3
public void fromFragmentData(String data) {
    //Данные получены
}
0
Zul-ya
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 15:09  [ТС] #5
Ага понятно, а если строку то надо не одну передавать?
Цитата Сообщение от YuraAAA Посмотреть сообщение
Java(TM) 2 Platform Standard Edition 5.0Выделить код
public void fromFragmentData(String data) {
* * //Данные получены
}
А данные нам получать с getFragmentManager().findFragmentById(R.id.editName1)?
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
24.03.2016, 15:38 #6
Мне нравится по другому делать:

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
public class FragmentData extends Fragment {
 
EditText editName1, editName2, editName3, editAll1, editAll2, editAll3;
Button btnDataSave, btnDataCam, btnDataFile;
 
    private onFragmentListener listener;
 
    public interface onFragmentListener {
        public void fragmentEvent(String string_1, String string_2, String string_3);
    }
 
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            listener = (OnFragmentListener) activity;
        }
        catch (ClassCastException e) {
            throw new ClassCastException(activity.toString());
        }
    }
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragmentdata, container, false);
 
        editName1 = (EditText) v.findViewById(R.id.editName1);
        editName2 = (EditText) v.findViewById(R.id.editName2);
        editName3 = (EditText) v.findViewById(R.id.editName3);
        editAll1 = (EditText) v.findViewById(R.id.editAll1);
        editAll2 = (EditText) v.findViewById(R.id.editAll2);
        editAll3 = (EditText) v.findViewById(R.id.editAll3);
 
        btnDataSave = (Button)  v.findViewById(R.id.btnDataSave);
        btnDataCam = (Button) v.findViewById(R.id.btnDataCam);
        btnDataFile = (Button) v.findViewById(R.id.btnDataFile);
        btnDataSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(LOG_TAG, "Button Save");
            }
        });
 
        btnDataCam.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(LOG_TAG, "Button Cam");
            }
            });
 
        btnDataFile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(LOG_TAG, "Button File");
                listener.fragmentEvent(editName1.getEditableText.toString, editName2.getEditableText.toString, editName3.getEditableText.toString)
            }
        });
 
        return v;
    }
 
 
}
Добавлено через 3 минуты
Java
1
2
3
4
5
6
7
public class MainActivity extends AppCompatActivity implements FragmentData.OnFragmentListener {
 
 
    @Override
    public void fragmentEvent(String s_1, String s_2, String s_3) {
 
    }
0
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
24.03.2016, 16:04 #7
OlegJV, я не вижу необходимости использовать тут интерфейсы. Фрагмент, как правило, используется только в контексте одной активити, на которую всегда есть ссылка
0
Zul-ya
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 16:06  [ТС] #8
0
Pablito
24.03.2016, 16:11
  #9

Не по теме:

ну тогда и instanceof там тоже не нужен в проверках

0
Zul-ya
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 16:15  [ТС] #10
YuraAAA, ну все таки, а как выводится в активити с getFragmentManager().findFragmentById(R.id.editName1)?

Добавлено через 2 минуты
Пожалуйста подскажите, или хотя бы подскажите как правильно вопрос задать в поиске, если я этих фрагментах разберусь, то все приложение закончу, а то у меня все остальное готово...(((
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
24.03.2016, 16:32 #11
Надеюсь как скопипастить разберетесь.
http://stackoverflow.com/questions/1...ween-fragments
0
Zul-ya
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 16:35  [ТС] #12
Bend3r, спасибо за ссылку сейчас посмотрю)
0
YuraAAA
24.03.2016, 17:02
  #13

Не по теме:

Паблито, согласен, просто тупо привычка уже

0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
24.03.2016, 17:25 #14
YuraAAA, Ну мне так больше нравится
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2016, 17:25
Привет! Вот еще темы с ответами:

Передать в активити массив размерностью, превышающую допустимый интентом - Программирование Android
Всем привет. Из класса необходимо передать массив типа byte в activity. Стандартный способ: Bundle bundle = new Bundle(); ...

Как передать через intent нажатие кнопки в другом активити - Программирование Android
В первом активити у нас есть две кнопки 1 и 2. Во втором активити ещё две кнопки 3 и 4. Вопрос в том, как сделать так, чтоб при нажатии...

Как из одного активити строку передать в другую в виде listView - Программирование Android
это первое активитиpublic class TodoActivity extends Activity implements View.OnClickListener { private EditText mTaskInput; ...

Как с ListFragment передать имя файла чтобы открыть его в другом Активити? - Программирование Android
Всем привет, я новичек! ломаю голову над такой задачей: Есть ListFragment со списком &quot;приборов&quot; мне надо при нажатии на нужный прибор...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
24.03.2016, 17:25
Ответ Создать тему
Опции темы

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