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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
#1

Как добавить фрагменты в Tabbed Activity (Андроид Студио)? - Android

17.08.2015, 17:10. Просмотров 1521. Ответов 15
Метки нет (Все метки)

Добрый день. Хочу сделать в Андроид Студио листалку на шаблоне Tabbed Activity. Когда добавляла этот шаблон, Студия автоматически создала саму листалку-pager (activity_main_activity2) и один фрагмент (fragment_main_activity2). Теперь когда листаю, три раза пролистывается один и тот же фрагмент. Как привязать другие фрагменты к pager'у?
Я создала еще один фрагмент, но не знаю, как его присоединить. Наверное, ссылку на него нужно как-то вставить сюда(это класс pager'а)?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
                case 0:
                    return getString(R.string.title_section1).toUpperCase(l);
                case 1:
                    return getString(R.string.title_section2).toUpperCase(l);
                case 2:
                    return getString(R.string.title_section3).toUpperCase(l);
            }
            return null;
        }
    }
А вот класс pager'а полностью:

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import java.util.Locale;
 
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.FragmentPagerAdapter;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
 
public class MainActivity2 extends ActionBarActivity {
 
    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
     * {@link FragmentPagerAdapter} derivative, which will keep every
     * loaded fragment in memory. If this becomes too memory intensive, it
     * may be best to switch to a
     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
     */
    SectionsPagerAdapter mSectionsPagerAdapter;
 
    /**
     * The {@link ViewPager} that will host the section contents.
     */
    ViewPager mViewPager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
 
 
        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
 
        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
 
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main_activity2, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {
 
        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }
 
        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return PlaceholderFragment.newInstance(position + 1);
        }
 
        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }
 
        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
                case 0:
                    return getString(R.string.title_section1).toUpperCase(l);
                case 1:
                    return  getString(R.string.title_section2).toUpperCase(1);
                case 2:
                    return getString(R.string.title_section3).toUpperCase(l);
            }
            return null;
        }
    }
 
    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";
 
        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }
 
        public PlaceholderFragment() {
        }
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main_activity2, container, false);
            return rootView;
        }
    }
 
}
В общем, подскажите, пожалуйста, как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2015, 17:10     Как добавить фрагменты в Tabbed Activity (Андроид Студио)?
Посмотрите здесь:

Android Как работает библиотека в андроид студио, как ее подключить, чтобы она заработала в проекте?
андроид студио Android
Android Как импортировать скаченный проект в андроид студио
Как прописать математическую формулу в андроид студио Android
Android Как объявить переменную в Андроид Студио?
Android Как добавить версию андроид
Android Как работать с каждой страницей приложения в Tabbed Activity?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
18.08.2015, 10:42     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #2
WalkCat, здравствуйте!
Java
1
2
3
4
5
6
@Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return PlaceholderFragment.newInstance(position + 1);
        }
Здесь перепишите выбор фрагмента. А то у вас выбирается один и тот же фрагмент. Надо разные (в завимости от position).
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
18.08.2015, 13:56  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #3
Цитата Сообщение от CoolMind Посмотреть сообщение
WalkCat, здравствуйте!
Здесь перепишите выбор фрагмента. А то у вас выбирается один и тот же фрагмент. Надо разные (в завимости от position).
А можно поконкретнее, как его переписать? (сорри, я новичек) Попробовала вот так, не получается:
Java
1
2
3
4
5
6
        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return MyFragment.newInstance(position);
        }
- подеркивает position и пишет: "newInstance() in MyFragment cannot be applied to (int)"
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
18.08.2015, 14:47     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #4
Цитата Сообщение от WalkCat Посмотреть сообщение
А можно поконкретнее, как его переписать?
Лень набирать, должно быть примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return MyFragment1.newInstance(здесь параметры, передаваемые во фрагмент);
                    break;
                case 1:
                    return new MyFragment2();
                    break;
                case 2:
                    return MyFragment3.newInstance();
                    break;
            }
        }
Каждый фрагмент у вас должен быть создан отдельно через File > New > Fragment > Blank Fragment.
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
18.08.2015, 15:59  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #5
Не получается... Вот здесь подчеркивает (1) и пишет "MyFragment() in MyFragment cannot be applied to (int)". Если просто оставить "MyFragment(), то подчеркивает всю строку и пишет "incompatible types. Required: java.lang.CharSequence Found: skv.wallpaper.MyFragment". Пустые скобки после newInstance() тоже подчеркивает и пишет "newInstance(String, String) in MyFragment2 cannot be applied to ()" :
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
                case 0:
                    return getString(R.string.title_section1).toUpperCase(l);
                    break;
                case 1:
                    return new MyFragment(1);
                    break;
                case 2:
                    return MyFragment2.newInstance();
            }
            return null;
        }
А вот тут так же подчеркивает position и пишет: "newInstance(java.lang.String, String) in MyFragment cannot be applied to (int)":
Java
1
2
3
4
5
6
        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return MyFragment.newInstance(position);
        }
(здесь параметры, передаваемые во фрагмент)
А какие именно параметры тут должны быть?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
18.08.2015, 17:34     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #6

Не по теме:

WalkCat, девушка, с вами можно познакомиться?.. Вы определённо мне нравитесь.


Смотрите.
Функция CharSequence getPageTitle возвращает вам строку, а не ссылку на фрагмент. Соответственно, если не ошибаюсь, там хранится название фрагмента. Пока верните, как было, подредактируйте потом по вкусу.
Функция Fragment getItem возвращает ссылку на фрагмент. Именно они и нужны. Вы передаёте параметр position, а функция вам возвращает созданный фрагмент. Допустим, открыли вы активность (activity), создался первый фрагмент (position = 0). Вызывается getItem(0). Внутри надо прописать проверку, какой именно position передан - 0, 1 или 2 (примерно так, как я вам писал выше).
Дальше требуется создать фрагмент. Сейчас написано:
Java
1
return MyFragment.newInstance(position);
т.е. создаётся один и тот же одинаковый фрагмент класса MyFragment. Это неправильно.
Должны быть три разных фрагмента (созданные вами вручную через File > New > Fragment > Fragment (Blank)).
Создаёте их, добавляете туда всякие надписи, поля, кнопки, рисунки, списки по вкусу.
Допустим, у вас получатся следующие фрагменты (классы): Fragment1, Fragment2, Fragment3.
Внутри по умолчанию будет так:
Кликните здесь для просмотра всего текста
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
public class Fragment1 extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
 
    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
 
    private OnFragmentInteractionListener mListener;
 
    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment Fragment1.
     */
    // TODO: Rename and change types and number of parameters
    public static Fragment1 newInstance(String param1, String param2) {
        Fragment1 fragment = new Fragment1();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }
 
    public Fragment1() {
        // Required empty public constructor
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_fragment1, container, false);
    }
 
    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }
 
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }
 
    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }
 
    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        public void onFragmentInteraction(Uri uri);
    }
}

Как видите, функция newInstance принимает 2 строковых параметра. Можете переписать по вкусу, хоть вообще их удалить. Также есть другие способы инициализации фрагментов.

Добавлено через 4 минуты
Параметры могут быть любые, какие вам нужны. Например, вы создаёте фрагмент, который отображает список книг одного автора. Тогда можете передать на вход его фамилию или id в базе данных. Или фрагмент может содержать карту. Тогда на вход можно передать координаты пользователя. Под каждый случай пишется свой фрагмент со своими параметрами.
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
18.08.2015, 23:51  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #7

Не по теме:

Чем же?)


Благодарю за подробное разъяснение, только у меня все равно остались вопросы...)
Цитата Сообщение от CoolMind Посмотреть сообщение
Функция CharSequence getPageTitle возвращает вам строку, а не ссылку на фрагмент. Соответственно, если не ошибаюсь, там хранится название фрагмента. Пока верните, как было, подредактируйте потом по вкусу.
То есть, это можно оставить как было по умолчанию, на работу приложения не повлияет?
Цитата Сообщение от CoolMind Посмотреть сообщение
Должны быть три разных фрагмента (созданные вами вручную через File > New > Fragment > Fragment (Blank)).
Да, у меня есть три фрагмента - один создался автоматически вместе с листалкой, другие два я создала как вы и сказали. В каждом фрагменте у меня есть картинка и кнопка.
Сначала у меня было вот так, PlaceholderFragment - это фрагмент, созданный автоматически с листалкой:
Java
1
2
3
4
5
6
@Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return PlaceholderFragment.newInstance(position + 1);
        }
(кстати, а position + 1 что значит?) Я попробовала подставить вместо Placeholder название своего фрагмента - MyFragment. Если 0 - это первый фрагмент (Placeholder), то MyFragment - это 1? Но он подчеркивает position в любом варианте... Всего три фрагмента - PlaceholderFragment, MyFragment, MyFragment2. Как у меня должен выглядеть этот метод? Его три раза нужно писать, для каждого фрагмента отдельно? Или как, если фрагментов три?

Цитата Сообщение от CoolMind Посмотреть сообщение
Параметры могут быть любые, какие вам нужны. Например, вы создаёте фрагмент, который отображает список книг одного автора. Тогда можете передать на вход его фамилию или id в базе данных. Или фрагмент может содержать карту. Тогда на вход можно передать координаты пользователя. Под каждый случай пишется свой фрагмент со своими параметрами.
А если мне не нужно передавать никаких параметров, можно оставить скобки пустыми? У меня в таком случае подчеркивает всю строчку красным... Сорри, что задаю столько вопросов)
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
19.08.2015, 09:37     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #8
Цитата Сообщение от WalkCat Посмотреть сообщение
То есть, это можно оставить как было по умолчанию, на работу приложения не повлияет?
Да.
Цитата Сообщение от WalkCat Посмотреть сообщение
а position + 1 что значит?
position в данном случае - порядковый номер текущего фрагмента. В метод передается position + 1, вероятно для того, что бы отображать имя фрагмента, а т.к. считается все с нуля, добавляется единица, что бы было не 0,1,2 в названии, а 1,2,3.
Цитата Сообщение от WalkCat Посмотреть сообщение
А если мне не нужно передавать никаких параметров, можно оставить скобки пустыми?
Это зависит от конструктора фрагмента - что он принимает, то и нужно ему отправить (написать в скобках). По идее раз у вас три совсем разных фрагмента, и параметры им никакие задавать не нужно в зависимости от порядкового номера - можно сделать конструктор без параметров. По рекомендациям конструктор итак должен быть всегда пустым у фрагментов.
Java
1
2
3
4
//вот это конструктор
public MyFragment(){
 
}
Фрагменты обычно создаются через фабрику:
Java
1
2
3
4
public static MyFragment newInstance(){
     return new MyFragment();
}
//Этого достаточно для создания фрагмента без параметров.
Далее что бы менять фрагменты в "листалке"
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        
        @Override
        public Fragment getItem(int position) {
            switch(position){
                case 0:
                    return MyFragment1.newInstance();
                case 1:
                    return MyFragment2.newInstance();
                case 2:
                    return MyFragment3.newInstance();
                default:
                    return null;//Это для того, что бы что-то вернулось, если порядковый номер вдруг будет больше 2. И в данном случае приложение закроется с ошибкой.
            }
        }
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
19.08.2015, 16:03  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Это зависит от конструктора фрагмента - что он принимает, то и нужно ему отправить (написать в скобках). По идее раз у вас три совсем разных фрагмента, и параметры им никакие задавать не нужно в зависимости от порядкового номера - можно сделать конструктор без параметров. По рекомендациям конструктор итак должен быть всегда пустым у фрагментов.
Все-таки не позволяет оставить скобки пустыми... Я сделала вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        @Override
        public Fragment getItem(int position) {
            switch(position){
                case 0:
                    return PlaceholderFragment.newInstance(0);
                case 1:
                    return MyFragment.newInstance();
                case 2:
                    return MyFragment2.newInstance();
                default:
                    return null;
            }
        }
- все скобки подчеркивает красным, для первого фрагмента (PlaceholderFragment) я написала (0) - получилось, а для других двух фрагментов что написать? 1, 2 - не принимает. Видимо, все-таки нужны какие-то параметры?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
19.08.2015, 17:07     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #10
Цитата Сообщение от WalkCat Посмотреть сообщение
Видимо, все-таки нужны какие-то параметры?
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Фрагменты обычно создаются через фабрику:
Java
1
2
3
4
public static MyFragment newInstance(){
 return new MyFragment();
}
//Этого достаточно для создания фрагмента без параметров.
У вас так? Если нет, удалите из скобок параметры.
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
19.08.2015, 18:08  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #11
Цитата Сообщение от CoolMind Посмотреть сообщение
У вас так? Если нет, удалите из скобок параметры.
А где это должно быть, в классе листалки или в классе фрагмента? Вот класс фрагмента полностью (второй фрагмент такой же):
Кликните здесь для просмотра всего текста
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
96
97
98
99
100
101
102
103
104
105
106
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
 
/**
 * A simple {@link Fragment} subclass.
 * Activities that contain this fragment must implement the
 * {@link MyFragment.OnFragmentInteractionListener} interface
 * to handle interaction events.
 * Use the {@link MyFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class MyFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
 
    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
 
    private OnFragmentInteractionListener mListener;
 
    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment MyFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static MyFragment newInstance(String param1, String param2) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }
 
 
    public MyFragment() {
        // Required empty public constructor
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_my, container, false);
    }
 
    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }
 
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }
 
    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }
 
    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p/>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        public void onFragmentInteraction(Uri uri);
    }
 
}

Если удалить параметры вот здесь и сделать как в образце фрагмента без параметров, то выделяет красным выше Param1, Param2, а если их удалить, то весь класс становится недействительным:
Java
1
2
3
4
5
6
7
8
9
10
11
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment MyFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static MyFragment newInstance(String param1, String param2) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
19.08.2015, 19:21     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #12
Удаляйте все не нужное, должно получиться примерно так:
Кликните здесь для просмотра всего текста
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
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
 
 
public class MyFragment extends Fragment {
 
    public static MyFragment newInstance() {
        MyFragment fragment = new MyFragment();
        return fragment;
    }
 
 
    public MyFragment() {
        // Required empty public constructor
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_my, container, false);
    }
 
 
 
   
 
}
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
19.08.2015, 21:14  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #13
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Удаляйте все не нужное, должно получиться примерно так:
Ок, удалила из фрагментов ненужное, сделала как вы сказали. Но в листалке все равно подчеркивает красным строчки return MyFragment.newInstance(); и return MyFragment2.newInstance(); здесь:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        @Override
        public Fragment getItem(int position) {
            switch(position){
                case 0:
                    return PlaceholderFragment.newInstance(0);
                case 1:
                    return MyFragment.newInstance();
                case 2:
                    return MyFragment2.newInstance();
                default:
                    return null;
            }
        }
Пишет: "incompatible types. Required: android.support.v4.app.fragment Found: skv.wallpaper.MyFragment". Что еще можно сделать?
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
19.08.2015, 23:22     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #14
Нужно фрагмент унаследовать (extends) от фрагсента из саппорт либы. Можно удалить строку import android.app.fragment, потом навести курсор на красный текст Fragment, нажать ctrl + enter и выбрать в списке строку в которой есть слово support.
WalkCat
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 17
20.08.2015, 14:21  [ТС]     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #15
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Можно удалить строку import android.app.fragment, потом навести курсор на красный текст Fragment, нажать ctrl + enter и выбрать в списке строку в которой есть слово support.
Получилось! Заменила во фрагментах import android.app.fragment на import android.support.v4.app.Fragment и все заработало! Огромное спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2016, 15:24     Как добавить фрагменты в Tabbed Activity (Андроид Студио)?
Еще ссылки по теме:

ViewPager (Tabbed activity) как добавить данные на сраницы? Android
Android Андроид студио
Android Открытие apk в андроид студио
Android Зависание Андроид Студио
Андроид Студио - Cannot resolve symbol Android

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

Или воспользуйтесь поиском по форуму:
ViktorKolosov
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 13
19.05.2016, 15:24     Как добавить фрагменты в Tabbed Activity (Андроид Студио)? #16
Спасибо большое, вы так же и мне очень помогли)
Yandex
Объявления
19.05.2016, 15:24     Как добавить фрагменты в Tabbed Activity (Андроид Студио)?
Ответ Создать тему
Опции темы

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