2016-04-19 3 views
1

Я пытаюсь получить текущий просмотр страницы с ViewPager с помощью Viewpager.findViewWithTag. Когда вы пытаетесь получить текущий вид из ViewPager, он возвращает Null;Получение текущего представления из ViewPager

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.viewpager_main); 
    Bundle bundle = getIntent().getExtras(); 
    chapter = bundle.getInt("chapter"); 


    ViewPagerAdapter adapter = new ViewPagerAdapter(this, chapter); 
    pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    View myView = pager.findViewWithTag(pager.getCurrentItem()); 

... и вот мой ViewPageAdapter

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    LayoutInflater inflater; 
    if(position != 10){ 
      inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.viewpager_item, container, 
      false); 
     itemView.setTag(position); 

    } else { 
     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.results, container, 
       false); 
    } 
    container.addView(itemView); 
    return itemView ; 
} 

Вот viewpager_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 
<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
</RelativeLayout> 

и вот viewpager_item.xml

<?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" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="300dp" 
    android:gravity="center_horizontal" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="300dp" 
     android:layout_height="wrap_content" 
     android:background="#fff" 
     android:scaleType="fitCenter" 
     /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal"> 

    <Button 
     android:id="@+id/Button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:tag="1" 
     android:text="1" /> 

    <Button 
     android:id="@+id/Button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:tag="2" 
     android:text="2" /> 

    <Button 
     android:id="@+id/Button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:tag="3" 
     android:text="3" /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" > 

    <Button 
     android:id="@+id/Button4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:tag="4" 
     android:text="4" /> 

    <Button 
     android:id="@+id/Button5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:tag="5" 
     android:text="5" /> 
</LinearLayout> 

Я не знаю, где я совершил ошибку, но не смог ее исправить. Спасибо

+0

Вы пытаетесь принести мнения ребенка на ViewPager или элементы ViewPager? –

+0

Я пытаюсь получить Кнопки от него; – alynurly

+0

Можете ли вы разместить свой xml, где находится ваш ViewPager? –

ответ

0

Вы должны использовать String для тега. Вы можете использовать String.valueOf(yourPosition); каждый раз, когда хотите использовать int в качестве тега.

Что касается документа: Поставьте тег для этого представления, содержащий строку, которая будет получена позже с помощью View.getTag() или будет найден с помощью View.findViewWithTag(). Обычно предпочтительнее использовать идентификаторы (через атрибут android: id) вместо тегов, потому что они быстрее и позволяют проверять тип времени компиляции.

Должно быть строковое значение, используя '\;' для удаления символов, таких как '\ n' или '\ uxxxx' для символа юникода.

http://developer.android.com/reference/android/view/View.html#attr_android%3atag

+0

Я тоже попробовал строку. Нет решения – alynurly

4

Вы можете попробовать что-то вроде этого -

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    LayoutInflater inflater; 
    if(position != 10){ 
      inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.viewpager_item, container, 
      false); 
     itemView.setTag("View"+position); 

    } else { 
     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.results, container, 
       false); 
    } 
    container.addView(itemView); 
    return itemView ; 
} 

И когда вам нужен текущий view-

View myView = pager.findViewWithTag("View"+pager.getCurrentItem()); 
Смежные вопросы