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

Передача разных данных в один Fragment

07.10.2018, 18:30. Показов 1170. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Нужно в Navigation drawer (реализован в MainActivity) по нажатию на пункт меню R.id.menu1 передавать одну часть массива данных, а по нажатию на R.id.menu3 передавать другую часть массива в один и тот же Fragment (First_Fragment()).
Подскажите как реализовать этот процесс передачи с помощью интерфейса. Спасибо
Код MainActivity:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
package com.example.user.project7;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
 
    Toolbar myToolbar;
    DrawerLayout myDrawerLayout;
    NavigationView navigationView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        myToolbar = findViewById(R.id.id_toolbar);
        setSupportActionBar(myToolbar);
 
        myDrawerLayout = findViewById(R.id.id_drawer);
        navigationView = findViewById(R.id.id_nv_activity_main);
        navigationView.setNavigationItemSelectedListener(this);
 
        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, myDrawerLayout, myToolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        myDrawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
 
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.id_fl_activity_main,
                    new First_Fragment()).commit();
            navigationView.setCheckedItem(R.id.menu1);
        }
 
    }
 
    @Override
    public void onBackPressed() {
        if (myDrawerLayout.isDrawerOpen(GravityCompat.START)) {
            myDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
 
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        int id = item.getItemId();
        Fragment fragment = null;
 
        switch (id) {
            case R.id.id_menu_about:
                Toast.makeText(this, "Текст", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu1:
                fragment = new First_Fragment();
                break;
            case R.id.menu2:
                fragment = new Second_Fragment();
                break;
            case R.id.menu3:
                fragment = new First_Fragment();
                // Toast.makeText(this, "Menu3", Toast.LENGTH_SHORT).show();
                break;
        }
 
        if (fragment != null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.id_fl_activity_main, fragment).commit();
        }
        myDrawerLayout.closeDrawer(GravityCompat.START);
 
        return true;
    }
 
 
 
}
Код First_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
55
56
package com.example.user.project7;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import java.util.ArrayList;
import java.util.List;
 
public class First_Fragment extends Fragment {
 
    List<WorkMan> list;
    RecyclerView recyclerView;
    View v;
    private int flg;
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        list = new ArrayList<>();
 
        if (flg == 1) {
            list.add(new WorkMan(R.drawable.men1, "Александр"));
            list.add(new WorkMan(R.drawable.men1, "Иван"));
            list.add(new WorkMan(R.drawable.men1, "Петр"));
            list.add(new WorkMan(R.drawable.men1, "Николай"));
            list.add(new WorkMan(R.drawable.men1, "Роман"));
        } else {
            list.add(new WorkMan(R.drawable.men1, "Инна"));
            list.add(new WorkMan(R.drawable.men1, "Елена"));
            list.add(new WorkMan(R.drawable.men1, "Людмила"));
            list.add(new WorkMan(R.drawable.men1, "Ирина"));
            list.add(new WorkMan(R.drawable.men1, "Виктория"));
        }
    }
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.first_fragment, container, false);
 
        recyclerView = v.findViewById(R.id.id_rv_first_fragment);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        RecyclerviewAdapter adapter = new RecyclerviewAdapter(getContext(), list);
        recyclerView.setAdapter(adapter);
 
        return v;
    }
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2018, 18:30
Ответы с готовыми решениями:

Передача данных из Activity в Fragment
Есть основной класс (puplic class ViewContact) в котором есть фрагменты (public static class...

Передача разных конкретных типов перечисления в один метод в качестве параметра
Поскольку прямая лобовая передача типа перечисления в метод в качестве параметра невозможна (?), то...

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

Передача в функцию данных разных типов
Нужно передать в функцию в качестве аргумента переменную типа ulong a затем переменную типа int ...

7
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
07.10.2018, 20:22 2
Цитата Сообщение от savylovskij Посмотреть сообщение
передавать одну часть массива данных
Стесняюсь спросить, а как вы передаете часть массива?
0
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
07.10.2018, 20:28  [ТС] 3
Первая часть массива
Java
1
2
3
4
5
 list.add(new WorkMan(R.drawable.men1, "Александр"));
            list.add(new WorkMan(R.drawable.men1, "Иван"));
            list.add(new WorkMan(R.drawable.men1, "Петр"));
            list.add(new WorkMan(R.drawable.men1, "Николай"));
            list.add(new WorkMan(R.drawable.men1, "Роман"));
Вторая часть массива
Java
1
2
3
4
5
            list.add(new WorkMan(R.drawable.men1, "Инна"));
            list.add(new WorkMan(R.drawable.men1, "Елена"));
            list.add(new WorkMan(R.drawable.men1, "Людмила"));
            list.add(new WorkMan(R.drawable.men1, "Ирина"));
            list.add(new WorkMan(R.drawable.men1, "Виктория"));
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
08.10.2018, 00:07 4
Так же, как и тут
Только в твоем случае нужна переменная int flg
0
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
08.10.2018, 22:14  [ТС] 5
Мне нужно реализовать через интерфейс.
В MainActivity добавил интерфейс sendDataActivityToFragment.
Код MainActivity:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.example.user.project7;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
 
    Toolbar myToolbar;
    DrawerLayout myDrawerLayout;
    NavigationView navigationView;
    sendDataActivityToFragment sendDataActivityToFragment;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        myToolbar = findViewById(R.id.id_toolbar);
        setSupportActionBar(myToolbar);
 
        myDrawerLayout = findViewById(R.id.id_drawer);
        navigationView = findViewById(R.id.id_nv_activity_main);
        navigationView.setNavigationItemSelectedListener(this);
 
        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, myDrawerLayout, myToolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        myDrawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
 
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.id_fl_activity_main,
                    new First_Fragment()).commit();
            navigationView.setCheckedItem(R.id.menu1);
        }
 
    }
 
    @Override
    public void onBackPressed() {
        if (myDrawerLayout.isDrawerOpen(GravityCompat.START)) {
            myDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
 
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        int id = item.getItemId();
        Fragment fragment = null;
 
        switch (id) {
            case R.id.id_menu_about:
                Toast.makeText(this, "Текст", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu1:
                if(fragment==null){
                    fragment = new First_Fragment();
                }
                sendDataActivityToFragment.sendData(1);
                break;
            case R.id.menu2:
                fragment = new Second_Fragment();
                break;
            case R.id.menu3:
                if(fragment==null){
                    fragment = new First_Fragment();
                }
                sendDataActivityToFragment.sendData(2);
                // Toast.makeText(this, "Menu3", Toast.LENGTH_SHORT).show();
                break;
        }
 
        if (fragment != null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.id_fl_activity_main, fragment).commit();
        }
        myDrawerLayout.closeDrawer(GravityCompat.START);
 
        return true;
    }
 
    public interface sendDataActivityToFragment {
        public void sendData(int i);
    }
 
}
В First_Fragment имплементировал MainActivity.sendDataActivityToFragment. Добавил метод sendData.
Код First_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
55
56
57
58
package com.example.user.project7;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import java.util.ArrayList;
import java.util.List;
 
public class First_Fragment extends Fragment implements MainActivity.sendDataActivityToFragment {
 
    List<WorkMan> list;
    RecyclerView recyclerView;
    View v;
    private int flg;
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        list = new ArrayList<>();
    }
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.first_fragment, container, false);
        recyclerView = v.findViewById(R.id.id_rv_first_fragment);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        RecyclerviewAdapter adapter = new RecyclerviewAdapter(getContext(), list);
        recyclerView.setAdapter(adapter);
        return v;
    }
 
    @Override
    public void sendData(int i) {
        flg = i;
        if (flg == 1) {
            list.add(new WorkMan(R.drawable.men1, "Александр"));
            list.add(new WorkMan(R.drawable.men1, "Иван"));
            list.add(new WorkMan(R.drawable.men1, "Петр"));
            list.add(new WorkMan(R.drawable.men1, "Николай"));
            list.add(new WorkMan(R.drawable.men1, "Роман"));
        } else {
            list.add(new WorkMan(R.drawable.men1, "Инна"));
            list.add(new WorkMan(R.drawable.men1, "Елена"));
            list.add(new WorkMan(R.drawable.men1, "Людмила"));
            list.add(new WorkMan(R.drawable.men1, "Ирина"));
            list.add(new WorkMan(R.drawable.men1, "Виктория"));
        }
 
    }
}
Но теперь получаю ошибку:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.user.project7, PID: 7490
    java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.user.project7.MainActivity$sendDataActivityToFragment.sendData(int)' on a null object reference
        at com.example.user.project7.MainActivity.onNavigationItemSelected(MainActivity.java:69)
        at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:166)
        at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:836)
        at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:987)
        at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:345)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Что делаю не так?
0
66 / 56 / 6
Регистрация: 28.12.2011
Сообщений: 322
08.10.2018, 23:32 6
Цитата Сообщение от +1 Посмотреть сообщение
Так же, как и тут
Только в твоем случае нужна переменная int flg
Надеюсь, что это шутка.
0
177 / 92 / 25
Регистрация: 04.02.2016
Сообщений: 296
Записей в блоге: 3
09.10.2018, 08:57 7
Лучший ответ Сообщение было отмечено savylovskij как решение

Решение

Автору темы, вдруг пригодится. Вполне доступным языком о взаимодействии активности с фрагментами - http://blog.harrix.org/article/7521
1
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
09.10.2018, 22:19  [ТС] 8
Спасибо Hugonavy за ссылку. Вопрос решил
0
09.10.2018, 22:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2018, 22:19
Помогаю со студенческими работами здесь

Сбор данных из разных файлов в один
Добрый день. Стоит задача собирать данные из нескольких файлов с одинаковой структурой в один,...

Объединение данных с разных файлов в один
Здравствуйте! Помогите, пожалуйста, с объединением данных в сводный отчет сразу с...

Перенос данных из разных столбцов в один
Добрый день. Подскажите пожалуйста как столбец A объединить с B, чтобы данные получились общие?...

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


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

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

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