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

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

Войти
Регистрация
Восстановить пароль
 
Stormylks
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 24
#1

Навигация свайпом. ListView - Программирование Android

30.10.2014, 16:02. Просмотров 1054. Ответов 11
Метки нет (Все метки)

Добрый день, хотел сделать приложение в котором есть на каждом экране отдельный ListView, свайпом можно переходить из экрана в экран, тапом открывается новое активити, для дальнейшего обратывания.
Делал по теме - вот тут

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
package com.example.slide2;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
 
public class MainActivity extends FragmentActivity {
    
    ViewPager pager;
    PagerAdapter pagerAdapter;
    private ViewPager mViewPager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mViewPager = (ViewPager) findViewById(R.id.pager);
        PagerTabStrip pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagerTabStrip);
        pagerTabStrip.setDrawFullUnderline(true);
        
        TitleAdapter titleAdapter = new TitleAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(titleAdapter);
        mViewPager.setCurrentItem(0);
    }
    
    public class TitleAdapter extends FragmentPagerAdapter {
        private final String titles[] = getResources().getStringArray(R.array.data); 
        
        private final Fragment frags[] = new Fragment[titles.length];
     
        public TitleAdapter(FragmentManager fm) {
            super(fm);
            frags[0] = new FragmentView1();
            frags[1] = new FragmentView2();
            frags[2] = new FragmentView3();
        }
     
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
     
        @Override
        public Fragment getItem(int position) {
            return frags[position];
        }
     
        @Override
        public int getCount() {
            return frags.length;
        }
    }
 
}
List1.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:contentDescription="@string/app_name"
    android:orientation="vertical" >
    
     <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
 
</LinearLayout>
FragmentView1.java
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
package com.example.slide2;
 
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class FragmentView1 extends Fragment {
 
 
    ListView list;
    String[] values;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) {        
        values = new String[] 
                { "Spinach Salad with Bosc Pears, Cranberries, Red Onion, and Toasted Hazelnuts",
                "Kale Salad with Pinenuts, Currants and Parmesan",
                "Tomato-Watermelon Salad with Feta and Toasted Almonds",
                "Tomato-Watermelon Salad with Feta and Toasted Almonds",
                "Tomato-Watermelon Salad with Feta and Toasted Almonds",
                "Tomato-Watermelon Salad with Feta and Toasted Almonds",
                "Mediterranean Chicken Salad",
                "Sliced Steak with Arugula",
                "Creamy Potato Salad with Lemon and Fresh Herbs",
                "Asian Tuna Salad",
                };
        
        
        
        View myView = inflater.inflate(R.layout.list1, container, false);
        
        list = (ListView)myView.findViewById(R.id.listView1);
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, values);
        
        
        list.setAdapter(adapter);
        list.setOnItemClickListener(new OnItemClickListener() 
        {
            
            @Override
            public void onItemClick(AdapterView<?> a, View view, int position, long id)
            
            {
                if (position==0)
                
                
                {
                    
                    // Pozice elementu 
                    
                    String itemname = new Integer(position).toString();
                    
                    Intent intent = new Intent();
                    
                    intent.setClass (FragmentView1.this, ViewActivity.class);
                    
                    Bundle b = new Bundle();
                    
                    // DefStrID obsahuje retezec, ktery zasleme prostrednictvim
                    //ItemName v jine Activity
                    
                    
                    b.putString("defStrID", itemname);
                    
                    intent.putExtras(b);
                    
                    // Intent
                    
                    startActivity(intent);
                    
                }
 
            }
        });
      
        return myView;
    }
    
    
}
Выдает ошибку в - intent.setClass (FragmentView1.this, ViewActivity.class);
The method setClass(Context, Class<?>) in the type Intent is not applicable for the arguments (FragmentView1, Class<ViewActivity>)

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

WebView. Навигация свайпом - Программирование Android
Здравствуйте! Есть WebView, статьи в который подгружаются из res/raw (n1.txt - n...txt), одна статья - один файл. Как свайпом осуществить...

Анимация следующая за свайпом - Программирование Android
Имеется 3 элемента RecyclerView: 1 слева(якобы за экраном), 1 в центре(видимый) и 1 справа(тоже за экраном). Требуется сделать так, чтобы...

Вытаскивание картинки свайпом - Программирование Android
Как реализовать такую функцию, чтобы картинку можно было свайпом вытащить из нижнего края экрана?

Вложенный HorizontalScrollView в ScrollView с общим свайпом - Программирование Android
Есть вложенный HorizontalScrollView в ScrollView. В общем суть проблемы - если начать скролить по горизонтали, то двигая палец вверх/вниз...

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

11
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
31.10.2014, 08:01 #2
Предположу, что надо вместо FragmentView1.this передавать context, создав его предварительно.
0
Stormylks
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 24
31.10.2014, 17:32  [ТС] #3
Цитата Сообщение от Rube Посмотреть сообщение
Предположу, что надо вместо FragmentView1.this передавать context, создав его предварительно.
А можно поподробней как это делается? я только учусь, если вам не сложно

Добавлено через 48 минут
Что бы не создавать новую тему, как можно реализовать свайп между 2 ListView и при нажатии, которые показывают содержимое?
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
31.10.2014, 21:06 #4
Цитата Сообщение от Rube Посмотреть сообщение
Предположу, что надо вместо FragmentView1.this передавать context, создав его предварительно.
Поглядел на http://stackoverflow.com/questions/1...upport-intents, там тоже предлагают поменять контекст. Во фрагментах это всегда или почти всегда getActivity(). Т.е. надо создать переменную Context context; потом присвоить context = getActivity(); и подставить туда.
0
Stormylks
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 24
31.10.2014, 22:13  [ТС] #5
Цитата Сообщение от CoolMind Посмотреть сообщение
Т.е. надо создать переменную Context context; потом присвоить context = getActivity(); и подставить туда.
Я попробовал сделать как вы сказали, context принял, но в MainActivity в этом месте ошибка теперь -
Java
1
2
3
4
5
6
      public TitleAdapter(FragmentManager fm) {
            super(fm);
            frags[0] = new FragmentView1();
            frags[1] = new FragmentView2();
            frags[2] = new FragmentView3();
        }
отказывается считывать последующие FragmentView2 и FragmentView3
ошибка - Type mismatch: cannot convert from FragmentView2 to Fragment
хотя они идентичны отличаются только содержанием листа, ну и id файлов xml.

Так же была ошибка в
Java
1
private final String titles[] = getResources().getStringArray(R.array.data);
array как я понял не прописывался почему то в R.java сделал пока что так -
Java
1
private final String titles[] = new String[]{"test","test2","test3"};
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
31.10.2014, 22:44 #6
Stormylks, ничего не могу подсказать вам по этой теме. Ошибки сами по себе несложные, но я просто с этим не работал. Попробуйте принудительно преобразовать так: frags[1] = (Fragment) (new FragmentView2()); Или уберите слово final. С прописыванием элементов в R.java тоже существует баг. По-моему, помогает иногда пересоздание элемента.
0
Stormylks
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 24
31.10.2014, 23:07  [ТС] #7
Цитата Сообщение от CoolMind Посмотреть сообщение
frags[1] = (Fragment) (new FragmentView2()); Или уберите слово final. С прописыванием элементов в R.java тоже существует баг. По-моему, помогает иногда пересоздание элемента.
Спасибо за старание помочь, но увы проблема осталась
FragmentView2 и FragmentView3 не конвертируются в Fragment
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
02.11.2014, 11:45 #8
От чего наследуете ваши 2 и 3 фрагменты? Может из саппорт либы?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
02.11.2014, 18:09 #9
Попробуйте в frags[0] = new FragmentView1() вставить в параметры(скобки) this (или context) и принять его в FragmentView1 в конструкторе (this.context = context).
0
Stormylks
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 24
03.11.2014, 19:23  [ТС] #10
не помогло, изменил готовое приложение из примера, там таких ошибок не было, все отображается, только реализация клика не проходит, ошибок нету, но при клике закрывается приложение.
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
15.11.2014, 13:47 #11
Stormylks, вчера по случаю решил сменить устаревший TabHost на ViewPager. И сразу вижу ошибки в вашем коде.
Поглядите на http://startandroid.ru/ru/uroki/vse-...viewpager.html. Можете даже многое оттуда взять по образцу.
Создание фрагментов (после нескольких ошибок понял) идёт по другому направлению. Соответственно, и вызов их - тоже.
Итак, требуется исправить (код на работе, поэтому могут быть ошибки):
Java
1
2
3
4
5
6
public TitleAdapter(FragmentManager fm) {
            super(fm);
            frags[0] = FragmentView1.newInstance();
            frags[1] = FragmentView2.newInstance();
            frags[2] = FragmentView3.newInstance();
        }
Java
1
2
3
4
5
6
7
8
9
10
11
public class FragmentView1 extends Fragment {
...
    public static Fragment newInstance() {//int page) {
        Fragment pageFragment = new FragmentView1();
        // Если есть параметры, добавляем их, иначе удаляем часть кода.
        //Bundle arguments = new Bundle();
        //arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
        //pageFragment.setArguments(arguments);
 
        return pageFragment;
  }
Но вообще, интересно, что у вас получилось, может, попробуем вместе разобраться.
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
16.11.2014, 23:19 #12
Цитата Сообщение от Stormylks Посмотреть сообщение
хотя они идентичны отличаются только содержанием листа, ну и id файлов xml.
Забыл дописать. Я как раз использовал у себя набор вкладок, где было несколько одинаковых фрагментов, отличающихся только содержанием. В этом случае их реализация становится ещё проще. Надо просто запрограммировать один фрагмент, в метод newInstance которого передавать нужное вам содержание как параметр. По ссылке, указанной выше, об этом тоже говорится. В этом случае можно несколько раз создать фрагменты на основе одного и того же класса.
Java
1
2
3
4
5
6
public TitleAdapter(FragmentManager fm) {
            super(fm);
            frags[0] = FragmentView.newInstance("текст1");
            frags[1] = FragmentView.newInstance("текст2");
            frags[2] = FragmentView.newInstance("текст3");
        }
Соответственно, переданный параметр надо получить внутри класса FragmentView. Об этом написано там же, или вы можете почитать в других примерах, посвящённых фрагментам.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2014, 23:19
Привет! Вот еще темы с ответами:

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

навигация приложения - Программирование Android
Как правильно сделать верхнее меню для приложения, на подобии такого: http://s2.ipicture.ru/uploads/20130830/UjJZYdkz.png Я...


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

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

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