创建ViewPager或同等学历,在Android的功能(Create a ViewPager or

2019-09-16 10:44发布

我知道这听起来像一个可怕的问题要问,但我一直在研究,就像我能算出这个。 我有需要的图寻呼机水平滚动以显示不同视图的应用程序。 在每个视图,它需要的功能,一个视图这可能只是按下一个按钮,另一种观点认为,需要从服务器上下载数据(例如,检索最新的Twitter的饲料),以及其他功能。 主要的一点是,查看传呼机内,每个视图需要的功能。

我最初的想法是按照这个教程:

http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizo​​ntal-view-paging/

然而,这仅仅是提供具有无相互作用的观点。 我已成功地实现这一点,加上我的布局,然而这只是解决了问题的一半的。 它显示了如何如一个按钮在注释中添加基本操作。 我想每个视图都有自己的活动,它能够做自己独特的东西。

以下是我本来有:

public class DashboardContainerActivity extends Activity{

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //Set content view to the dashboard container xml view
    setContentView(R.layout.dashboard_container);

    //Create a new instance of my page adapter from below
    MyPageAdapter adapter = new MyPageAdapter();
    //Reference the view pager used in the dashboard container xml view
    ViewPager myPager = (ViewPager) findViewById(R.id.dashboardpanelpager);
    //set an adapter to the view pager
    myPager.setAdapter(adapter);
    //First panel to be shown when opened
    myPager.setCurrentItem(3);
  }

}

/*------------------------------------------------------*/
class MyPageAdapter extends PagerAdapter {

  public int getCount() {
      //Return 7 as there will be 7 panes in the dashboard
      return 7;
  }

  public Object instantiateItem(View collection, int position) {

      LayoutInflater inflater = (LayoutInflater) collection.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      View v = null;
      switch (position) {
      case 0:
          v = inflater.inflate(R.layout.dashboard_social, null);
          break;
      case 1:
          v = inflater.inflate(R.layout.dashboard_info, null);
          //DISPLAY INFORMATION FROM SERVER AND DISPLAY HERE
          break;
      case 2:
          v = inflater.inflate(R.layout.dashboard_allcourses, null);
          //LIST OF COURSES

          break;
      case 3:
          v = inflater.inflate(R.layout.dashboard_news, null);
          //USE HTTP HERE FOR TWITTER FEED


          break;
      case 4:
          v = inflater.inflate(R.layout.dashboard_mycourse, null);
          //DOWNLOAD USER'S PERSONAL INFORMATION AND DISPLAY HERE

          break;
      case 5:
          v = inflater.inflate(R.layout.dashboard_media, null);
          //DISPLAY LATEST UPLOADED MULTIMEDIA
          break;
      case 6:
          v = inflater.inflate(R.layout.dashboard_extras, null);
          break;
      }

      ((ViewPager) collection).addView(v, 0);

       return v;
  }

  @Override
  public void destroyItem(View arg0, int arg1, Object arg2) {
      ((ViewPager) arg0).removeView((View) arg2);

  }

  @Override
  public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == ((View) arg1);

  }

  @Override
  public Parcelable saveState() {
      return null;
  }
 }

我有添加到ViewPager每个布局独立的活动,但我猜测,这些活动不能被添加到ViewPager而不仅仅是布局。

我读过一些有关片段,但我不知道这是否是与API级别8兼容,显然这是针对Honeycomb和Ice Cream Sandwich系统。

Answer 1:

这是不可能有一个活动作为ViewPager的一部分,但没有理由为什么你不能在你的ViewPager添加你所描述的每一页的功能。 要分配的互动或事件的组件在每个视图只添加正确的听众instantiateItem()在每个case语句:

case 0:
      v = inflater.inflate(R.layout.dashboard_social, null);
      Button myButton = (Button) v.findViewById(R.id.name_of_button_in_social_dashboard);
      myButton.setOnClickListener(...);
      break;

对于任何其他的互动,喜欢把自己的http请求的Twitter的饲料,只执行那些作为你的主要活动的一部分(类似HTTP请求应该在课程的后台线程来完成)。 当你想更新的Twitter页面的UI,只需使用ViewPager.getChildAt(3)来获取子元素。 您的活动看作只是一个大的布局,7个孩子的观点是所有可用一次(但用户只能看到他们,因为他们刷卡)。

说了这么多,更好的设计模式可能是使用片段与FragmentPagerAdapter支持你ViewPager。 这允许各种页面到不同的类别的更好逻辑分解 - 片段也提供其他用途,如能够为较大的屏幕布局(片)在一次加载屏幕上的多个。

像ViewPager,片段中的所有可用的方式回到通过支持库(见API等级4 片段 )。 所以你不必担心向后兼容性。



文章来源: Create a ViewPager or equivalent WITH functionality in Android