2012-11-28 18 views
27

Tôi đã thực hiện chế độ xem Tab cũng như chế độ xem vuốt ngang (để thay đổi tab) bằng chế độ Điều hướng dưới dạng Danh sách cho ứng dụng. Tôi đang sử dụng ActionBarSherlock & TabPageIndicator. Tôi đã sử dụng các mảnh để tải lại nội dung sau khi thay đổi các tab.OnNavigationItemSelected của Actionbar (vị trí int, long itemId) không được kích hoạt sau khi vuốt ngang trong Gingerbread

Trong trình đơn thả xuống, tôi có 2 mục. Đây là những nhận được lựa chọn bất cứ khi nào hoạt động tải lại hoặc sau khi nhấn vào Tabs.

Nhưng, nếu swipe được thực hiện để chọn tab khác, sau đó onNavigationItemSelected (int vị trí, dài ItemID) sẽ không nhận được kích hoạt trong phiên bản Gingerbread :(Chúng tôi đã thử nghiệm nó trên Gingerbread 2.3.6, 2.3.3.

Trong logcat, tôi nhận này warning nhắn "View:onTouchEvent:ViewFlags" is DISABLED

Nhưng, nó hoạt động hoàn toàn tốt đẹp trên ICS, Froyo vv

sự giúp đỡ của bạn sẽ được đánh giá rất nhiều.

sau đây là đoạn mã:

public class MainPageActivity extends SherlockFragmentActivity implements 
     ActionBar.OnNavigationListener { 

    MenuItem menuItem; 
    EditText searchText; 
    public static Context mContext; 
    public static DataAdapter dataAdapter; 
    ArrayList<String> accountList; 
    public static List<View> currentViewBeingChanged = new ArrayList<View>(); 

    public static LayoutInflater layoutInflater; 
    public static String checktab = "running", nameComp; 
    int isRefresh; 
    public static boolean isAutoRefresh = true; 
    public static ArrayList<String> listItems; 
    public static boolean check; 
    public static boolean isAtleastOnce = true, listToBeRefreshed = false; 
    public static ActionBar actionBar; 
    public static int itemPosition, listPosition; 
    public static FragmentManager fragmentManager; 
    InputMethodManager imm; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     mContext = this; 

     layoutInflater = getLayoutInflater(); 

     fragmentManager = getSupportFragmentManager(); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_page); 

     actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

     imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

     Context context = getSupportActionBar().getThemedContext(); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, 
       android.R.layout.simple_spinner_dropdown_item); 
     adapter.clear(); 
     for (int i = 0; i < ManageAccountLists.accountList.size(); i++) { 
      adapter.add(ManageAccountLists.accountList.get(i)); 
     } 

     actionBar.setListNavigationCallbacks(adapter, this); 

     tabPagerFunction(); 

    } 

    public void tabPagerFunction() { 

     FragmentPagerAdapter adapter = new GoogleMusicAdapter(
       getSupportFragmentManager()); 
     adapter.notifyDataSetChanged(); 

     ViewPager pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(adapter); 

     checktab = "running"; 

     final TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator); 
     indicator.setViewPager(pager); 

     pager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 

       System.out.println("Tab selected.................."); 

       if (arg0 == 0) { 

        // Running tab is selected 
        indicator.setCurrentItem(arg0); 

        checktab = "running"; 
        RunningInstancesActivity runningInstancesActivity = new RunningInstancesActivity(); 
        runningInstancesActivity.callThread(); 

       } else { 

        // Stopped tab is selected 
        indicator.setCurrentItem(arg0); 
        checktab = "stopped"; 
        StoppedInstancesActivity stoppedInstancesActivity = new StoppedInstancesActivity(); 
        stoppedInstancesActivity.callThread(); 
        InstanceStatusUpdate.isOnPostExecute = false; 

       } 

      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 

      } 
     }); 

    } 

    class GoogleMusicAdapter extends FragmentPagerAdapter { 

     private final String[] CONTENT = new String[] { "Running", "Stopped" }; 

     public GoogleMusicAdapter(FragmentManager fm) { 
      super(fm); 
      notifyDataSetChanged(); 

     } 

     @Override 
     public Fragment getItem(int position) { 

      switch (position) { 
      /** Running tab is selected */ 
      case 0: 
       checktab = "stopped"; 
       return RunningInstancesActivity.newInstance(0); 

       /** Stopped tab is selected */ 
      case 1: 

       checktab = "running"; 
       return StoppedInstancesActivity.newInstance(1); 
      } 
      return null; 

     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return CONTENT[position % CONTENT.length].toUpperCase(); 
     } 

     public CharSequence getPageTitle(int position, int number) { 
      return CONTENT[position % CONTENT.length].toUpperCase(); 
     } 

     @Override 
     public int getCount() { 
      return CONTENT.length; 
     } 
    } 

    @Override 
    public boolean onNavigationItemSelected(int itemPosition, long itemId) { 

      System.out.println("Navigation item selected"); 

     // Performs fetching 
    } 



    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 

     System.out.println("Dispatch touvh event.."); 

     return super.dispatchTouchEvent(ev); 

    } 

} 
+0

bạn đã xem mã của tôi dưới đây chưa? – Trinimon

Trả lời

0

Theo tôi nhớ có một số vấn đề với việc cập nhật danh sách điều hướng sau khi vuốt (trong ABS). Đây là những gì tôi đã làm để giải quyết vấn đề này và nó hoạt động với Android 2.3.7 (ABS) cũng như với Android 4.0 (bản địa AB).

pager.setOnPageChangeListener(new OnPageChangeListener() { 
    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    } 

    @Override 
    public void onPageSelected(int position) { 
     if (navigatioBarIsUsed) actionBar.setSelectedNavigationItem(position); 
     if (tabsAreUsed) actionBar.getTabAt(position).select(); 
    } 
}); 

Nội bộ nó chọn lại trang - điều đó không quá đẹp - tuy nhiên đó là giải pháp duy nhất tôi tìm thấy.

Cheers

0

Sử dụng mã này ..

Bên Fragment của bạn Sử dụng mã này.

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     // TODO Auto-generated method stub 
     super.setUserVisibleHint(isVisibleToUser); 
     if (isVisibleToUser) { 
      Activity activity = getActivity(); 
      ActionBar actionBar = ((ActionBarActivity) activity) 
        .getSupportActionBar(); 
      actionBar.setIcon(getResources().getDrawable(R.drawable.nearby)); 


     } 
    } 
1

Hãy thử làm điều này

dependencies { 

compile "com.android.support:appcompat-v7:18.0.+" 
} 

và sử dụng thư viện hỗ trợ để thay thế.