2015-02-17 1 views
5

У меня есть ResponsiveUIActivity, который распространяется SlidingFragmentActivity. Мое приложение отлично работает под версией Android версии 5.0. Но мой пользовательский интерфейс не обновляется и не доступен для кликов, когда я впервые переключаю скользящее меню. Например, я не могу прокрутить ListView или написать что-нибудь на EditText после первого переключения. Если я переключаю скользящее меню, пользовательский интерфейс обновляется, и я могу видеть изменения. Как я могу решить эту проблему?UI не обновляется после первого переключения скользящего меню на Android 5.0 леденец

ResponsiveUIActivity.java

public class ResponsiveUIActivity extends SlidingFragmentActivity { 
    private Fragment mContent; 
    public static ResponsiveUIActivity rootActivity; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTitle(R.string.responsive_ui); 
     setContentView(R.layout.responsive_content_frame); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     rootActivity = this; 

     // startNotificationService(); 

     // check if the content frame contains the menu frame 
     if (findViewById(R.id.menu_frame) == null) { 
      setBehindContentView(R.layout.menu_frame); 
      getSlidingMenu().setSlidingEnabled(true); 
      getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 

      // show home as up so we can toggle 
      getActionBar().setDisplayHomeAsUpEnabled(false); 
      getActionBar().setDisplayShowHomeEnabled(false); 
     } else { 
      // add a dummy view 
      View v = new View(this); 
      setBehindContentView(v); 
      getSlidingMenu().setSlidingEnabled(false); 
      getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); 
     } 

     // set the Above View Fragment 
     if (savedInstanceState != null) 
      mContent = getSupportFragmentManager().getFragment(
        savedInstanceState, "mContent"); 
     if (mContent == null) 
      mContent = new NewsFragment(); 

     // customize the SlidingMenu 
     SlidingMenu sm = getSlidingMenu(); 
     sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); 
     sm.setShadowWidthRes(R.dimen.shadow_width); 
     sm.setShadowDrawable(R.drawable.shadow); 
     sm.setBehindScrollScale(0.25f); 
     sm.setFadeDegree(0.25f); 

     sm.setOnOpenedListener(new SlidingMenu.OnOpenedListener() { 
      @Override 
      public void onOpened() { 
       Log.d("ToggleMenu", "onOpened"); 
      } 
     }); 
     sm.setOnCloseListener(new SlidingMenu.OnCloseListener() { 
      @Override 
      public void onClose() { 
       Log.d("ToggleMenu", "onClose"); 
      } 
     }); 

     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.content_frame, mContent).commit(); 

     // set the Behind View Fragment 
     getSupportFragmentManager() 
       .beginTransaction() 
       .replace(R.id.menu_frame, 
         new MenuFragment((ResponsiveUIActivity) rootActivity)) 
       .commit(); 

     // hide app icon from actionBar 
     getActionBar().setIcon(android.R.color.transparent); 
     getActionBar().setTitle(""); 

     /* 
     * // show the explanation dialog if (savedInstanceState == null) new 
     * AlertDialog.Builder(this) .setTitle(R.string.what_is_this) 
     * .setMessage(R.string.responsive_explanation) .show(); 
     */ 
    } 

    private void startNotificationService() { 
     // TODO Auto-generated method stub 
     // Intent intent = new Intent(rootActivity, NotificationService.class); 
     // startService(intent); 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      toggle(); 
     } 
     return super.onOptionsItemSelected((android.view.MenuItem) item); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     getSupportFragmentManager().putFragment(outState, "mContent", mContent); 
    } 

    public void switchContent(final Fragment fragment) { 
     mContent = fragment; 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.content_frame, fragment).commit(); 
     Handler h = new Handler(); 
     h.postDelayed(new Runnable() { 
      public void run() { 
       getSlidingMenu().showContent(); 
      } 
     }, 50); 
    } 

    @Override 
    public void onBackPressed() { 
     Log.v("SignUp", "onbackPressed !!!!!!"); 
     toggle(); 
    } 

    public void finishActivity() { 
     super.onBackPressed(); 
    } 

} 

MenuFragment.java

@SuppressLint("ValidFragment") 
public class MenuFragment extends Fragment { 

    LinearLayout newsClick, profileClick, adsClick, companyClick, wsClick, 
      contactsClick, contactClick, backClick, settingsClick; 
    ResponsiveUIActivity rootActivity; 

    public MenuFragment(ResponsiveUIActivity rootActivity) { 
     // TODO Auto-generated constructor stub 
     this.rootActivity = rootActivity; 
    } 

    public MenuFragment() { 
     super(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View v; 

     if (PublicSharedPreferences.getDefaults(Constants.language, 
       getActivity()).equals("T")) { 
      v = inflater.inflate(R.layout.list_tr, null); 
     } else { 
      v = inflater.inflate(R.layout.list, null); 
     } 

     addMenuButtons(v); 

     return v; 
    } 

    private void addMenuButtons(View v) { 

     newsClick = (LinearLayout) v.findViewById(R.id.newsClick); 
     newsClick.setOnClickListener(onclick); 

     profileClick = (LinearLayout) v.findViewById(R.id.profileClick); 
     profileClick.setOnClickListener(onclick); 

     adsClick = (LinearLayout) v.findViewById(R.id.adsClick); 
     adsClick.setOnClickListener(onclick); 

     companyClick = (LinearLayout) v.findViewById(R.id.companyClick); 
     companyClick.setOnClickListener(onclick); 

     wsClick = (LinearLayout) v.findViewById(R.id.wsClick); 
     wsClick.setOnClickListener(onclick); 

     contactsClick = (LinearLayout) v.findViewById(R.id.contactsClick); 
     contactsClick.setOnClickListener(onclick); 

     contactClick = (LinearLayout) v.findViewById(R.id.contactClick); 
     contactClick.setOnClickListener(onclick); 

     backClick = (LinearLayout) v.findViewById(R.id.backClick); 
     backClick.setOnClickListener(onclick); 

     settingsClick = (LinearLayout) v.findViewById(R.id.settingsClick); 
     settingsClick.setOnClickListener(onclick); 

    } 

    OnClickListener onclick = new OnClickListener() { 
     Fragment newContent = null; 

     @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 
      case R.id.newsClick: 
       newContent = new NewsFragment(); 
       break; 

      case R.id.profileClick: 
       newContent = new ProfileFragment(); 
       break; 

      case R.id.adsClick: 
       newContent = new RecruitmentAdsFragment(); 
       break; 

      case R.id.companyClick: 
       newContent = new CompanyProfileFragment(); 
       break; 

      case R.id.wsClick: 
       newContent = new WsFragment(); 
       break; 

      case R.id.contactsClick: 
       newContent = new ContactsFragment(); 
       break; 

      case R.id.contactClick: 
       newContent = new ContactFragment(); 
       break; 

      case R.id.backClick: 

       PublicSharedPreferences.removeDefaults(Constants.token, 
         getActivity().getApplicationContext()); 
       PublicSharedPreferences.removeDefaults(Constants.TURKISH_ID, 
         getActivity().getApplicationContext()); 

       if (PublicSharedPreferences.getDefaults(
         Constants.TAG_NATIONALITY, getActivity() 
           .getApplicationContext()) != null) { 
        PublicSharedPreferences.removeDefaults(
          Constants.TAG_NATIONALITY, getActivity() 
            .getApplicationContext()); 
       } 

       if (PublicSharedPreferences.getDefaults(
         Constants.TAG_EXPERIENCE, getActivity() 
           .getApplicationContext()) != null) { 
        PublicSharedPreferences.removeDefaults(
          Constants.TAG_EXPERIENCE, getActivity() 
            .getApplicationContext()); 
       } 

       if (PublicSharedPreferences.getDefaults(
         Constants.TAG_DATE_OF_BIRTH, getActivity() 
           .getApplicationContext()) != null) { 
        PublicSharedPreferences.removeDefaults(
          Constants.TAG_DATE_OF_BIRTH, getActivity() 
            .getApplicationContext()); 
       } 

       rootActivity.finishActivity(); 
       Intent preLoginIntent = new Intent(getActivity(), 
         PreLoginActivity.class); 
       preLoginIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
         | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       startActivity(preLoginIntent); 
       getActivity().overridePendingTransition(
         R.anim.animated_activity_slide_left_in, 
         R.anim.animated_activity_slide_right_out); 

       break; 

      case R.id.settingsClick: 
       Log.v("Tekfen", "Settings"); 

       newContent = new SettingsFragment(); 
       break; 

      default: 
       break; 
      } 

      if (newContent != null) 
       switchFragment(newContent); 

     } 
    }; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    } 

    // the meat of switching the above fragment private void 
    public void switchFragment(Fragment fragment) { 
     if (getActivity() == null) 
      return; 

     if (getActivity() instanceof ResponsiveUIActivity) { 
      ResponsiveUIActivity ra = (ResponsiveUIActivity) getActivity(); 
      ra.switchContent(fragment); 
     } 
    } 

} 

styles.xml

<?xml version="1.0" encoding="utf-8"?> 

<style name="ExampleTheme" parent="Theme.Sherlock.Light.DarkActionBar"> 
    <item name="homeAsUpIndicator">@drawable/new_indicator</item> 
    <item name="android:homeAsUpIndicator">@drawable/new_indicator</item> 
</style> 

<style name="AppTheme" parent="@style/Theme.Sherlock"> 
    <item name="actionBarStyle">@style/AppTheme.ActionBar</item> 
    <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item> 
    <item name="homeAsUpIndicator">@drawable/new_indicator</item> 
    <item name="android:homeAsUpIndicator">@drawable/new_indicator</item> 
    <item name="android:actionBarItemBackground">@android:color/transparent</item> 
    <item name="actionBarItemBackground">@android:color/transparent</item> 
    <item name="android:actionBarSize">100dp</item> 
    <item name="android:windowActionBarOverlay">true</item> 
    <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> 
    <item name="activatedBackgroundIndicator">@drawable/activated_background</item> 
</style> 

<style name="AppTheme.ActionBar" parent="@style/Widget.Sherlock.ActionBar"> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="background">@android:color/transparent</item> 
</style> 

<style name="ProgressHUD" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

<style name="list_view_divider"> 
    <item name="android:divider">#F0F0F0</item> 
    <item name="android:dividerHeight">1dp</item> 
</style> 

+0

У меня точно такая же проблема. Я попробовал почти все. Кажется, что slideMenu влияет на фрагменты. Вы решили это? – kospol

+0

Решена ли ваша проблема? @kospol – GOLDEE

+0

У меня есть причина, вы можете проверить мой ответ ниже – GOLDEE

ответ

1

Я, наконец, нашел решение! Просто установите тег targetSdkVersion внутри манифеста на 21.

+0

Нет, все еще не работает – GOLDEE

6

У меня была такая же проблема, но мне удалось это решить. Реальная проблема заключается в дефекте в отношении аппаратного ускорения, поэтому, если вы добавите в свой AndroidManifest, что ваше приложение hardwareAccelerated = "true" ваша проблема будет решена.

1

Попробуйте изменить линию 1005:

boolean layer = percentOpen > 0.0f && percentOpen < 1.0f; 

к

boolean layer = percentOpen >= 0.0f && percentOpen <= 1.0f; 

в SlidingMenu.java

Смежные вопросы