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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
#1

ViewPager - Android

20.02.2013, 02:19. Просмотров 2201. Ответов 14
Метки нет (Все метки)

Помогите пожалуйста. Использую эту фичу в своей программе(пример один и его очень много в поисковике). И столкнулся с проблемой. На странице есть картинка(около 0,5МБ). Сколько будет страниц заведомо не известно(в зависимости от поля БД). Но в лист влезает только 3 страницы. Больше вызывает крах Out of memory. Как организовать работу что бы всё было нормально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 02:19     ViewPager
Посмотрите здесь:

создание ViewPager Android
Android ViewPager
ViewPager Indicator Android
Android Поворот ViewPager
Android ViewPager и ListView
ViewPager Android
GridView и ViewPager Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
20.02.2013, 11:39     ViewPager #2
показывайте как организовано сейчас
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
20.02.2013, 14:54  [ТС]     ViewPager #3
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
    LayoutInflater inflater = LayoutInflater.from(this);
        List<View> pages = new ArrayList<View>();
        ImageView btn;
         
        View page;
        
        
        SQLiteDatabase db=dbHelpet.getReadableDatabase();
        Cursor cursor=db.query(TB_NAME,new String[]{ITEM_ID,ITEM_PRICE, ITEM_PHOTO, ITEM_TITLE,ITEM_TEXT, ITEM_ZURLPRODUCE, ITEM_ZURLSOURCE}, "_id=?",new String[] {MyApp.ID_Rat.toString()}, null, null, "ZPLACE_");
        cursor.moveToFirst();
//        int indCateg= cursor.getColumnIndex(SUBCATEGORY_CATEGORY);
        int indPhoto= cursor.getColumnIndex(ITEM_PHOTO);
        int indTitle= cursor.getColumnIndex(ITEM_TITLE);
        int indPrice= cursor.getColumnIndex(ITEM_PRICE);
        int indText= cursor.getColumnIndex(ITEM_TEXT);
        int indUrlP= cursor.getColumnIndex(ITEM_ZURLPRODUCE);
        int indUrlS= cursor.getColumnIndex(ITEM_ZURLSOURCE);
        
       
        String PakageName= this.getPackageName();
        if(!cursor.isAfterLast()) {
            
                //ArrUni[counter].categ.id=cursor.getInt(indId);
                item.transform(cursor.getString(indPhoto));
                item.sTITLE=cursor.getString(indTitle);
                item.iPRICE=cursor.getInt(indPrice);
                item.sTEXT= cursor.getString(indText);
                item.sURLPRODUCE=cursor.getString(indUrlP);
                item.sURLSOURCE=cursor.getString(indUrlS);
                for(int i=0; i<item.sPHOTO.size();i++){
                page = inflater.inflate(R.layout.page_item, null);
                
                btn= (ImageView)page.findViewById(R.id.imageView1);
                Uri path = Uri.parse("android.resource://"+PakageName+"/drawable/"+item.sPHOTO.get(i));
                btn.setImageURI(path);
                pages.add(page);}
                page=inflater.inflate(R.layout.page_info, null);
                TextView txt1=(TextView)page.findViewById(R.id.textView1);
                TextView txt2=(TextView)page.findViewById(R.id.textView2);
                TextView txt3=(TextView)page.findViewById(R.id.textView3);
                txt1.setText(item.sTITLE);
                txt2.setText(String.valueOf(item.iPRICE));
                txt3.setText(item.sTEXT);
            
        }
        
        cursor.close();
        SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(pages);
        ViewPager viewPager = new ViewPager(this);
        viewPager.setAdapter(pagerAdapter);
        viewPager.setCurrentItem(1);     
         
        setContentView(viewPager);
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
20.02.2013, 16:24     ViewPager #4
В адаптеры никто вьюхи не передаёт, в адаптеры передают данные.
Конкретно в вашем случае вам нужен адаптер для ViewPager'a. Посмотрите пожалуйста примеры как с ним работать и как там всё организовано.
примеры поидее у вас должны быть тут:
C:\Program Files\Android\android-sdk\extras\android\support\samples\Support4Demos\
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
20.02.2013, 19:43  [ТС]     ViewPager #5
вот мой адаптер
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
public class SamplePagerAdapter extends PagerAdapter{
    
    List<View> pages = null;
     
    public SamplePagerAdapter(List<View> pages){
        this.pages = pages;
    }
     
    @Override
    public Object instantiateItem(View collection, int position){
        View v = pages.get(position);
        ((ViewPager) collection).addView(v, 0);
        return v;
    }
     
    @Override
    public void destroyItem(View collection, int position, Object view){
        ((ViewPager) collection).removeView((View) view);
    }
     
    @Override
    public int getCount(){
        return pages.size();
    }
     
    @Override
    public boolean isViewFromObject(View view, Object object){
        return view.equals(object);
    }
 
    @Override
    public void finishUpdate(View arg0){
    }
 
    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1){
    }
 
    @Override
    public Parcelable saveState(){
        return null;
    }
 
    @Override
    public void startUpdate(View arg0){
    }
}
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
20.02.2013, 19:48     ViewPager #6
а вы не хотели бы всё таки взглянуть в примеры? посмотреть как делают ViewPager и скармливают ему FragmentPagerAdapter?
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
22.02.2013, 23:57  [ТС]     ViewPager #7
Смотрел примеры. Как и следовало ожидать они не рабочие. Но бог с ними. Решил всё проще.
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
public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;
 
    if (height > reqHeight || width > reqWidth) {
 
        // Calculate ratios of height and width to requested height and width
        final int heightRatio = Math.round((float) height / (float) reqHeight);
        final int widthRatio = Math.round((float) width / (float) reqWidth);
 
        // Choose the smallest ratio as inSampleSize value, this will guarantee
        // a final image with both dimensions larger than or equal to the
        // requested height and width.
        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
    }
 
    return inSampleSize;
}
    public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
            int reqWidth, int reqHeight) {
 
        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);
 
        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
 
        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeResource(res, resId, options);
    }
Добавлено через 5 минут
Теперь всё работает. Но возникла проблема. Как вы могли понять в предыдущих участков кода. Я на активити динамически добавляю имейджбатоны и текствю. И как результат. на активити полный безпорядок. а текствюшек вообще не видно. Помогите. Как поправить?
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
23.02.2013, 00:09     ViewPager #8
Цитата Сообщение от tach Посмотреть сообщение
Смотрел примеры. Как и следовало ожидать они не рабочие.
какие конкретно нерабочие? будем разбиратся.
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
24.02.2013, 05:22  [ТС]     ViewPager #9
Цитата Сообщение от YAUHEN Посмотреть сообщение
какие конкретно нерабочие? будем разбиратся.
FragmentPagerSupport
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.02.2013, 12:49     ViewPager #10
А где вы брали код примера? Тот что поставляет гугл - вполне рабочий. Да и странно было бы если бы они поставляли нерабочий.
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
25.02.2013, 16:34  [ТС]     ViewPager #11
У меня проблеммы с вот этим куском
mAdapter = new MyAdapter(getSupportFragmentManager());
The method getSupportFragmentManager() is undefined for the type FragmentPagerSupport
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.02.2013, 17:03     ViewPager #12
FragmentPagerSupport extends FragmentActivity?
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
25.02.2013, 19:33  [ТС]     ViewPager #13
я не розбирался. Взял код и запустил
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.02.2013, 19:55     ViewPager #14
откуда взяли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 00:53     ViewPager
Еще ссылки по теме:

Android Правильный ViewPager
ViewPager автодаводка Android
ViewPager setText Android
Android AsyncTask в Fragment и viewPager
Android ViewPager и Tab

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

Или воспользуйтесь поиском по форуму:
tach
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 16
26.02.2013, 00:53  [ТС]     ViewPager #15
Папка в которой установлен Андроид\android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app
Yandex
Объявления
26.02.2013, 00:53     ViewPager
Ответ Создать тему
Опции темы

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