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

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

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Изменение Activity из ViewPager - Программирование Android

04.11.2015, 12:44. Просмотров 385. Ответов 3
Метки нет (Все метки)

Добрый день!

Есть viewPager, который принимает на вход 3 фрагментов и работает с ними.
Активики, в которой расположен viewPager, есть текстовое поле. Хотела сделать так. чтобы при смене фрагмента в viewPager изменялся текст в активити. Второй текстовый элемент не изменяется. просто показывает сколько есть страниц. Но не получается так сделать.

Пробовала получать активити из фрагмента, потом устанавливать вручную номер страницы, но "практика показала", что после добавления классов-фрагментов в лист Фрагментов остаётся последний номер. т.е.. текстВью бы показывали, например, 25 из 25. А нуно 1 из 25, 14 из 25 и тд.


Где подключается и работает вьюпейджер.
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
package test.ru.simpledesign;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.widget.TextView;
 
import java.util.ArrayList;
import java.util.List;
 
public class SimpleDesignerPage extends FragmentActivity
{
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.simpledesign);
        initViewPager();
    }
 
    private void initViewPager() {
        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        List<Fragment> fragments = new ArrayList<Fragment>();
 
        fragments.add(Fragment.instantiate(this, jf1.class.getName()));
        fragments.add(Fragment.instantiate(this, jf2.class.getName()));
        fragments.add(Fragment.instantiate(this, jf3.class.getName()));
 
        TextView tvM2 = (TextView) findViewById(R.id.tvMain2);
        tvM2.setText(Integer.toString(fragments.size()));
 
        pager.setAdapter(new PagerAdapter(getSupportFragmentManager(), fragments));
    }
}
Реализация абстрактного класса PagerAdapter.
Я использую FragmentStatePagerAdapter, потому что фрагментов будет очень много, порядка 50-100. Может ли это быть причиной. что не могу изменить страницу текущего фрагмента в активити?
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
package octoprog.ru.simpledesign;
 
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
 
import java.util.List;
 
public class PagerAdapter extends FragmentStatePagerAdapter {
 
    private List<Fragment> fragments;
 
    public PagerAdapter(FragmentManager manager, List<Fragment> fragments) {
        super(manager);
        this.fragments = fragments;
    }
    @Override
    public Fragment getItem(int index) {
        return fragments.get(index);
    }
    @Override
    public int getCount() {
        return fragments.size();
    }
}
Пример класса фрагмента
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package octoprog.ru.simpledesign;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class jf1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.f1, container, false);
    }
}
Ка выглядит окно (разметка) активити, где вьюпейджер есть
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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#fff780">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_weight="1">
 
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="#ffd16e">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
 
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_margin="5dp"
                android:textSize="10pt"
                android:id="@+id/tvMain1"
                />
 
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_margin="10dp"
                android:textSize="10pt"
                android:id="@+id/tvMain2"
                />
 
        </FrameLayout>
 
    </LinearLayout>
 
</LinearLayout>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2015, 12:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменение Activity из ViewPager (Программирование Android):

ViewPager (Tabbed activity) как добавить данные на сраницы? - Программирование Android
Среда андройд студио. &quot;я создал&quot; проект из коробки tabbed activity, автоматом создалось 2 xml, main отвечает за виджеты ,а второй за...

Изменение layout-элементов одного activity из другого activity - Программирование Android
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном activity из второго activity, каким образом мне можно это...

Изменение размера Activity - Программирование Android
как изменить размер активити по умолчанию его размер устанавливается во весь экран как уменьшить длину и ширину активити?как вызвать...

Изменение TextView во второй Activity - Программирование Android
Добрый день. Есть первая Activity, на ней расположены кнопки. Нажимая на первую кнопку, открывается вторая Activity с определенным...

Изменение background layout 'а сторонней Activity - Программирование Android
При нажатии на кнопку должен меняться background некоторых layout'ов, которые находятся в других Activity. public class...

Изменение данных через BaseAdapter в Activity - Программирование Android
Добрый день, у меня возникла следующая проблема. У меня имеется стандартное активити с listview и в этом же активити сверху имеется text...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zealot01
42 / 42 / 16
Регистрация: 24.08.2015
Сообщений: 136
Завершенные тесты: 1
04.11.2015, 14:02 #2
Nullik, Номер страницы текущего фрагмента можно получить через setOnPageChangeListener
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     pager.setOnPageChangeListener(new OnPageChangeListener() {
 
      @Override
      public void onPageSelected(int position) {
        Log.d(TAG, "onPageSelected, position = " + position);
      }
 
      @Override
      public void onPageScrolled(int position, float positionOffset,
          int positionOffsetPixels) {
      }
 
      @Override
      public void onPageScrollStateChanged(int state) {
      }
    });
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
04.11.2015, 16:05  [ТС] #3
эту штуку я знаю, делала, но возможно не там сделала? из-за чего всё потом работать вообще перестало

Куда мне нужно это добавить? Подскажите конкретный файл, класс и метод.
zealot01
42 / 42 / 16
Регистрация: 24.08.2015
Сообщений: 136
Завершенные тесты: 1
04.11.2015, 22:41 #4
Nullik, Попробуй добавить сразу после pager.setAdapter
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pager.setOnPageChangeListener(new OnPageChangeListener() {
             
              @Override
              public void onPageSelected(int position) {
                TextView tvM1 = (TextView) SimpleDesignerPage.this.findViewById(R.id.tvMain1);
                        tvM1.setText(Integer.toString(position));
              }
         
              @Override
              public void onPageScrolled(int position, float positionOffset,
                  int positionOffsetPixels) {
              }
         
              @Override
              public void onPageScrollStateChanged(int state) {
              }
            });
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2015, 22:41
Привет! Вот еще темы с ответами:

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity - Программирование Android
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было принято из-за скорости. Но...

Android - Передача данных с одного Activity на другое Activity - Программирование Android
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...

Из одного Activity получить значение другого Activity - Программирование Android
Запускаю активити: public class MainActivity extends Activity { ... ... Intent intent = new Intent(getBaseContext(),...

Вызвать из одной activity функцию другой activity - Программирование Android
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать? Допустим у меня есть основная активити и...


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

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

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