2015-08-10 3 views
0

У меня есть ViewPager и TextView, что-то странное происходит. У меня есть массив изображений в моем коде, и массив строки в строкиViewPager с TextView показывает странные результаты

<string-array name="helper_text"> 
     <item>first</item> 
     <item>second</item> 
     <item>third</item> 
     <item>fourth</item> 
    </string-array> 

и это мой XML-файл

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.toyberman.tmdb.HelpActivity" 
    android:orientation="vertical"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/help_pager" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="8"/> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:id="@+id/tv_help" 
     android:layout_below="@+id/help_pager" 

     /> 
</LinearLayout> 

и это мой Java-код

package com.toyberman.tmdb; 

import android.content.Context; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class HelpActivity extends AppCompatActivity { 

    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_help); 
     //finding view pager 
     viewPager = (ViewPager) findViewById(R.id.help_pager); 

     ImagePagerAdapter adapter = new ImagePagerAdapter(); 
     viewPager.setAdapter(adapter); 
    } 

    @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_help, menu); 
     return true; 
    } 


    private class ImagePagerAdapter extends PagerAdapter { 

     private String [] text; 

     private Integer[] images = { 
       R.drawable.first, R.drawable.second 
       , R.drawable.third, R.drawable.fourth 
     }; 

     public ImagePagerAdapter() { 
      this.text = getResources().getStringArray(R.array.helper_text); 
     } 

     @Override 
     public int getCount() { 
      return images.length; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == ((ImageView) object); 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      ((ViewPager) container).removeView((ImageView) object); 
     } 

     @Override 
     public Object instantiateItem(final ViewGroup container, int position) { 
      Context context = getApplicationContext(); 
      final ImageView imageView = new ImageView(context); 

      TextView tv= (TextView) findViewById(R.id.tv_help); 
      tv.setText(text[position]); 
      imageView.setImageBitmap(
        decodeSampledBitmapFromResource(getResources(),images[position],500, 500)); 


      ((ViewPager) container).addView(imageView, 0); 

      return imageView; 
     } 

    } 

} 

Проблема в том, что строки из массива String не соответствуют изображению. первое изображение должно быть «первой» строкой, но вместо этого я вижу «второе».

Спасибо!

+0

'instantiateItem' фактически будет вызываться как для первого, так и для второго элемента, даже если отображается только первый элемент. – akodiakson

+0

так как я могу это решить? –

+0

Почему вы всегда добавляете индекс 0? – akodiakson

ответ

1

На InstantiateItem параметр int position позиция элемента, визуализируется и НЕ положение фокуса элементов. Вы можете сделать ((ViewPager) container).getCurrentItem(), чтобы получить текущий элемент.

Надеюсь, это поможет.

+0

Спасибо! он решил проблему –

+0

Если возможно, примите ответ ... –