2

我在我的活動中實現了THIS,它的工作原理非常好,但每當用戶在屏幕上滑動手指時,我都想更改片段的內容。現在它顯示不考慮幻燈片的相同文本(從左到右或從右到左)。我該如何處理?我知道我在這裏錯過了一個非常小的部分,但我無法理解發生了什麼。我應該在哪裏添加偵聽器並處理這些操作?如何在ViewPager中的幻燈片中更改片段的內容?

這是我到目前爲止有:

public class ViewrerAct extends FragmentActivity { 

    private static final int NUM_PAGES = 5; 
    private ViewPager mPager; 
    private PagerAdapter mPagerAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_screen_slide); 

     // Instantiate a ViewPager and a PagerAdapter. 
     mPager = (ViewPager) findViewById(R.id.pager); 
     mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
     mPager.setAdapter(mPagerAdapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.bulgarian_sayings, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(
        R.layout.fragment_viewer, container, false); 
      return rootView; 
     } 
    } 

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
     public ScreenSlidePagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      System.out.println("inside!"); 
      return new ScreenSlidePageFragment(); 
     } 

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

public class ScreenSlidePageFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     ViewGroup rootView = (ViewGroup) inflater.inflate(
       R.layout.fragment_viewer, container, false); 

     return rootView; 
    } 
} 

回答

2

你應該張貼的代碼ScreenSlidPagerAdapter

不過,您需要重寫setPrimaryItem尋呼機適配器的方法,每次滑動尋呼機並更改顯示的頁面時都會調用該方法。

爲前:

@Override 
public void setPrimaryItem(ViewGroup container, int position, Object object) { 
    super.setPrimaryItem(container, position, object); 
    currentPage = position; 
} 

您可以將您的字符串數組中,並把它傳遞給適配器和內部適配器,您可以針對所選擇的位置改變片段內容。

帖子尋呼機適配器以及如果想要更合適的例子。

在你的情況,你可以簡單地傳遞字符串數組,假設你只是想顯示不同的試驗,適配器例如:

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
     String[] displayText; 
     public ScreenSlidePagerAdapter(FragmentManager fm,String[] displayText) { 
      super(fm); 
      this.displayText=displayText; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      System.out.println("inside!"); 
      ScreenSlidePageFragment fragment = new ScreenSlidePageFragment(); 
      fragment.setText(displayTest[position]); 
      return fragment; 
     } 

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

和你的片段類將改變爲:

public class ScreenSlidePageFragment extends Fragment { 
    private String text;  
    public void setText(String text){ 

    this.text=text; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     ViewGroup rootView = (ViewGroup) inflater.inflate(
       R.layout.fragment_viewer, container, false); 
     ((TextView)rootView.findViewById(textViewId)).setText(Text); 
     return rootView; 
    } 
} 
+0

我想你的意思是'ScreenSlidePageFragment'類。我編輯了我的問題。 :) – chility

+0

檢查我編輯的答案。 –

+0

'fragment.setText(displayTest [position]);'當我從右向左滑動位置值爲'0':( – chility