2017-06-05 112 views
0

我已經實現了選項卡布局設計,我想切換到不同的選項卡,只要有人點擊viewpager中的圖像。我的研究結論是,點擊事件註冊的viewpager適配器上,但是我不能找到一種方法,抓住從adapter.Below標籤佈局ID是我的看法尋呼機適配器代碼:從viewpager切換選項卡

public class BooksPagerAdapter extends PagerAdapter { 
    private Context mContext; 
    ViewPager viewPager; 
    private ViewPager pager = null; 
    ImageView image1; 
    private int images[] = {R.drawable.lagers11, R.drawable.stout11, R.drawable.malts11, R.drawable.lagers11, R.drawable.stout11, R.drawable.malts11}; 
    public BooksPagerAdapter(Context context) { 
     mContext = context; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, final int position) { 
     LayoutInflater inflater = LayoutInflater.from(mContext); 
     RelativeLayout relativeLayout = (RelativeLayout) ViewGroup.inflate(mContext, R.layout.tab_layout, null); 
     View itemView = inflater.inflate(R.layout.shop_books, container, false); 

     ImageView image1 = (ImageView) itemView.findViewById(R.id.image); 
     image1.setImageResource(images[position]); 
     itemView.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 
       //this will log the page number that was click 
       Toast.makeText(mContext, position + " pagess", Toast.LENGTH_SHORT).show(); 

      } 
     }); 
     ((ViewPager) container).addView(itemView); 
     return itemView; 

    } 

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

    @Override 
    public int getCount() { 
     return (6); 
    } 

    @Override 
    public float getPageWidth(int position) { 
     return (0.3f); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return (view == object); 
    }} 
  • show_books佈局

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical"> 
    <ImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:padding="2dp" 
    android:layout_height="100dp" /> 
    </FrameLayout> 
    
  • 標籤佈局

    <RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/shattered" 
    android:orientation="vertical"> 
    <android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/qb" 
    android:elevation="6dp" 
    app:tabGravity="fill" 
    app:tabIndicatorColor="#ffffff" 
    app:tabIndicatorHeight="3dp" 
    app:tabMode="scrollable" 
    app:tabSelectedTextColor="@color/tabSelectedTextColor" 
    app:tabTextColor="@color/tabTextColor"> 
    </android.support.design.widget.TabLayout> 
    <android.support.v4.view.ViewPager 
    android:id="@+id/viewpagertabs" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/tabs"> 
    </android.support.v4.view.ViewPager> 
    </RelativeLayout> 
    
  • +0

    請添加您的佈局。目前還不清楚你想要做什麼。 –

    +0

    你是否試圖使用ViewPager與圖像來選擇標籤?對於檢查,如果我選擇索引1的圖像,它應該使選項卡索引1選擇? –

    +0

    是@OlcayErtaş這就是我想要的 –

    回答

    0

    您可以使用您的EventBus活動或片段的子視圖之間comminicate。首先定義一個事件:

    public class ImageSelectedEvent { 
    
        int index; 
    
        public MessageEvent(int index) { 
         this.index = index; 
        } 
    } 
    

    比註冊該事件,如:

    @Subscribe(threadMode = ThreadMode.MAIN) 
    public void onMessageEvent(ImageSelectedEvent event) { 
        //TODO: make tab selected for event.index 
    } 
    

    比總線附加寄存器/取消註冊代碼:

    @Override 
    public void onStart() { 
        super.onStart(); 
        EventBus.getDefault().register(this); 
    } 
    
    @Override 
    public void onStop() { 
        EventBus.getDefault().unregister(this); 
        super.onStop(); 
    } 
    

    最後使用這樣成才當圖像點擊:

    itemView.setOnClickListener(new View.OnClickListener(){ 
        public void onClick(View v){ 
         int index = //get image index 
         EventBus.getDefault().post(new ImageSelectedEvent(index)); 
        } 
    }); 
    

    您可以在這裏找到更多:

    How to get started with EventBus in 3 steps

    +0

    哪個類做onMessageEvent,onStart和onStop方法坐?另外,如何在onMessageEvent方法內註冊tab事件? –

    +0

    你是男人@Olcay非常感謝 –

    +0

    不客氣,不要忘記註冊:) –

    1

    簡單,在圖像的OnClick你應該試試這個

    viewPager.setCurrentItem(pageNumber); 
    
    +0

    我遇到的問題是我沒有處理標籤佈局的viewPager變量 –

    +0

    您必須在您的Activity中創建一個方法,然後從Fragment的方法中調用此方法ImageView OnClick。在一個activity方法中,你可以訪問viewPager來調用viewPager.setCurrentItem(pageNumber); ...就是這樣。 –

    +0

    我正在調用適配器的onclick方法,不是fragment/Activity –