2017-10-06 4 views
0

私はループ内のいくつかの質問に基づいてレイアウトを動的に膨張させるためにViewpagerを使用しています。Viewpagerで最後に膨らんだレイアウトを見つける方法

次のようにこれが実現されます。

for (String x : array1) { 
       //loop out the number of layouts relative to the number of questions held in x 
       View current_layout = LayoutInflater.from(getActivity()).inflate(R.layout.question_fragment, null); 

     //use the page adapter to add the layout to the user's view 
      pagerAdapter.addView(current_layout); 
    } 

私は私のレイアウト上のボタンを持っていると私は、このボタンが膨張している最終的なレイアウトに基づいて見えるようにしたいです。

私はこれが達成される方法Viewpagerを使用する新しいので全くわからない、次のアダプタ

public class MainPagerAdapter extends PagerAdapter 
{ 
    // This holds all the currently displayable views, in order from left to right. 
    private ArrayList<View> views = new ArrayList<View>(); 

    //----------------------------------------------------------------------------- 
    // Used by ViewPager. "Object" represents the page; tell the ViewPager where the 
    // page should be displayed, from left-to-right. If the page no longer exists, 
    // return POSITION_NONE. 
    @Override 
    public int getItemPosition (Object object) 
    { 
     int index = views.indexOf (object); 
     if (index == -1) 
      return POSITION_NONE; 
     else 
      return index; 
    } 

    //----------------------------------------------------------------------------- 
    // Used by ViewPager. Called when ViewPager needs a page to display; it is our job 
    // to add the page to the container, which is normally the ViewPager itself. Since 
    // all our pages are persistent, we simply retrieve it from our "views" ArrayList. 
    @Override 
    public Object instantiateItem (ViewGroup container, int position) 
    { 
     View v = views.get (position); 
     container.addView (v); 
     return v; 
    } 

    //----------------------------------------------------------------------------- 
    // Used by ViewPager. Called when ViewPager no longer needs a page to display; it 
    // is our job to remove the page from the container, which is normally the 
    // ViewPager itself. Since all our pages are persistent, we do nothing to the 
    // contents of our "views" ArrayList. 
    @Override 
    public void destroyItem (ViewGroup container, int position, Object object) 
    { 
     container.removeView (views.get (position)); 
    } 

    //----------------------------------------------------------------------------- 
    // Used by ViewPager; can be used by the app as well. 
    // Returns the total number of pages that the ViewPage can display. This must 
    // never be 0. 
    @Override 
    public int getCount() 
    { 
     return views.size(); 
    } 

    //----------------------------------------------------------------------------- 
    // Used by ViewPager. 
    @Override 
    public boolean isViewFromObject (View view, Object object) 
    { 
     return view == object; 
    } 

    //----------------------------------------------------------------------------- 
    // Add "view" to right end of "views". 
    // Returns the position of the new view. 
    // The app should call this to add pages; not used by ViewPager. 
    public int addView (View v) 
    { 
     return addView (v, views.size()); 
    } 

    //----------------------------------------------------------------------------- 
    // Add "view" at "position" to "views". 
    // Returns position of new view. 
    // The app should call this to add pages; not used by ViewPager. 
    public int addView (View v, int position) 
    { 
     views.add (position, v); 
     return position; 
    } 

    //----------------------------------------------------------------------------- 
    // Removes "view" from "views". 
    // Retuns position of removed view. 
    // The app should call this to remove pages; not used by ViewPager. 
    public int removeView (ViewPager pager, View v) 
    { 
     return removeView (pager, views.indexOf (v)); 
    } 

    //----------------------------------------------------------------------------- 
    // Removes the "view" at "position" from "views". 
    // Returns position of removed view. 
    // The app should call this to remove pages; not used by ViewPager. 
    public int removeView (ViewPager pager, int position) 
    { 
     // ViewPager doesn't have a delete method; the closest is to set the adapter 
     // again. When doing so, it deletes all its views. Then we can delete the view 
     // from the adapter and finally set the adapter to the pager again. Note 
     // that we set the adapter to null before removing the view from "views" - that's 
     // because while ViewPager deletes all its views, it will call destroyItem which 
     // will, in turn, cause a null pointer ref. 
     pager.setAdapter (null); 
     views.remove (position); 
     pager.setAdapter (this); 

     return position; 
    } 

    //----------------------------------------------------------------------------- 
    // Returns the "view" at "position". 
    // The app should call this to retrieve a view; not used by ViewPager. 
    public View getView (int position) 
    { 
     return views.get (position); 
    } 

    // Other relevant methods: 

    // finishUpdate - called by the ViewPager - we don't care about what pages the 
    // pager is displaying so we don't use this method. 
} 

を使用しています - 私は、私は、カスタムメソッドを作成する必要があると仮定しますが、検索した後にしています私のシナリオでこれがどのように達成されたか、あるいは役に立ったかを明確に説明するものは見つけられませんでした。

私は、最初のレイアウトでボタンが消えるように次のように書くことができますが、最後のレイアウトに関しては混乱しています。

//Set button on the last layout in the viewpager 

    if (count == pagerAdapter.getCount()+1){ 

getCurrentPage().findViewById(R.id.btn_submit_question).setVisibility(View.GONE); 
    } 

私は

//Set button on the last layout in the viewpager 
       if (count != pagerAdapter.getCount()-1){ 

        current_layout.findViewById(R.id.btn_submit_question).setVisibility(View.GONE); 

       } 

と後の午前しかし、運がなかったものを達成しようとしています。

私はまた、あなたがViewPager.getAdapter().getCount()

The getAdapter()方法を使用する必要があり利用でき、これらの方法

// Here's what the app should do to add a view to the ViewPager. 
    public void addView (View newPage) 
    { 
     int pageIndex = pagerAdapter.addView (newPage); 
     // You might want to make "newPage" the currently displayed page: 
     pager.setCurrentItem (pageIndex, true); 
    } 

    //----------------------------------------------------------------------------- 
    // Here's what the app should do to remove a view from the ViewPager. 
    public void removeView (View defunctPage) 
    { 
     int pageIndex = pagerAdapter.removeView (pager, defunctPage); 
     // You might want to choose what page to display, if the current page was "defunctPage". 
     if (pageIndex == pagerAdapter.getCount()) 
      pageIndex--; 
     pager.setCurrentItem (pageIndex); 
    } 

    //----------------------------------------------------------------------------- 
    // Here's what the app should do to get the currently displayed page. 
    public View getCurrentPage() 
    { 
     return pagerAdapter.getView (pager.getCurrentItem()); 
    } 

    //----------------------------------------------------------------------------- 
    // Here's what the app should do to set the currently displayed page. "pageToShow" must 
    // currently be in the adapter, or this will crash. 
    public void setCurrentPage (View pageToShow) 
    { 
     pager.setCurrentItem (pagerAdapter.getItemPosition (pageToShow), true); 
    } 
+0

あなたはviewPager.addOnPageChangeListenerを使用してviews.get(位置) –

答えて

0

私は以下の問題を解決することができました。

Pranav Bhattに感謝します。&私を正しい方向に向けるためのCold Fire。

//Set button on the last layout in the viewpager 

if (pager.getAdapter().getCount()!= array1.length){ 

current_layout.findViewById(R.id.btn_submit_question).setVisibility(View.GONE); 

    } 
1

を持っているがViewPagerのためのページを提供するオブジェクトを返します。

getCount()方法がすでに追加されているページ数を返すので、

if(ViewPager.getAdapter().getCount()==array1-1){ 
// set button invisible here 
} 

は、それはあなたを助け願っています。

+0

で最後に選択したビューを取得することができます例を提供することができますか?解決策を見つける手助けをしていただきありがとうございます。 –

+0

@Displayname編集を確認してください –

+0

ColdFireでこれを編集していただきありがとうございます。 @Displaynameすぐに回答を確認してください。 – InsaneCat

関連する問題