2012-11-28 15 views
27

アプリケーションのリストとしてナビゲーションモードを使用してタブビューと横スワイプビュー(タブを変更する)を実装しました。私はActionBarSherlock & TabPageIndicatorを使用しています。私は、タブを変更した後でコンテンツを再読み込みするためにフラグメントを使用しました。ジンジャーブレッドで水平スワイプした後、アクションバーのonNavigationItemSelected(int position、long itemId)がトリガーされない

ドロップダウンスピナーには、2つのアイテムがあります。これらは、アクティビティが再ロードされるたびに、またはタブでヒットしたときに選択されます。スワイプは、その後onNavigationItemSelected(int型の位置、長いのitemId)はジンジャーブレッドのバージョンでトリガなっていないだろう、他のタブを選択するために行われている場合:(我々はジンジャーブレッド2.3.6、2.3.3でそれをテストしている

しかし、。

logcat

、私はこのwarningメッセージ"View:onTouchEvent:ViewFlags" is DISABLED

を得た。しかし、それは

などICS、フローズンヨーグルト、上で完全に正常に動作しますあなたの助けをいただければ幸いです。

次のコードスニペットです:

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

以下のコードを見ましたか? – Trinimon

答えて

0

私の知る限り(ABSに)スワイプした後、ナビゲーションリストを更新していくつかの問題があった覚えています。これは私がこの問題を解決するために行ったもので、Android 2.3.7(ABS)とAndroid 4.0(ネイティブ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(); 
    } 
}); 

内部的には、ページを再選択 - それはとても素敵ではない - それは私が見つけた唯一のソリューションでしたが。

乾杯

0

このコードを使用してください。..あなたのフラグメントの使用インサイド

このコード。

@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

この

dependencies { 

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

をやってみて、代わりにサポートライブラリを使用します。

関連する問題