0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
1

Передать данные из fragment в активити

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, Мне необходимо передать данные из фрагмента в активити, если подскажете буду благодарна.
во фрагменте есть несколько 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2016, 13:27
Ответы с готовыми решениями:

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

Передать данные в активити
Здравствуйте, такой вопрос: есть несколько активити с данными и ещё одно активити,в которое нужно...

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

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

13
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 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
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 14:27  [ТС] 3
YuraAAA, я немного не поняла, после создания fromFragmentData, передаем данные как? не судите строго я только учусь и хочу понять) что-то примеров не нашла подобных или не так искала((
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 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
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
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
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
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
24.03.2016, 16:04 7
OlegJV, я не вижу необходимости использовать тут интерфейсы. Фрагмент, как правило, используется только в контексте одной активити, на которую всегда есть ссылка
0
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 26
24.03.2016, 16:06  [ТС] 8
0
Pablito
24.03.2016, 16:11
  #9

Не по теме:

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

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

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

Не по теме:

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

0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
24.03.2016, 17:25 14
YuraAAA, Ну мне так больше нравится
0
24.03.2016, 17:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2016, 17:25
Помогаю со студенческими работами здесь

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

Как передать сохраненное значение из одного активити в другое?
У меня есть 2 активити. В одном есть элемент TextView, EditText и кнопка &quot;Сохранить&quot; После того,...

Передать в активити массив размерностью, превышающую допустимый интентом
Всем привет. Из класса необходимо передать массив типа byte в activity. Стандартный способ: ...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru