2015-02-17 14 views
5

Ich habe eine ResponsiveUIActivity, die SlidingFragmentActivity erweitert. Meine Anwendung funktioniert perfekt unter Android-Version 5.0. Aber meine Benutzeroberfläche wird nicht aktualisiert und kann nicht angeklickt werden, wenn ich zuerst das gleitende Menü umschalte. Zum Beispiel kann ich nicht scrollen ListView oder schreiben Sie etwas auf EditText nach dem ersten Umschalten. Wenn ich das Schiebe-Menü umschalte, wird die Benutzeroberfläche aktualisiert und ich kann die Änderungen sehen. Wie kann ich dieses Problem lösen?UI nicht aktualisiert, nach dem ersten Wechsel der Schiebe-Menü auf Android 5.0 Lollipop

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

ich genau das gleiche Problem haben. Ich habe fast alles ausprobiert. Es scheint, dass slidingMenu die Fragmente beeinflusst. Hast du es gelöst? – kospol

+0

Hat Ihr Problem schon gelöst? @kospol – GOLDEE

+0

Ich habe die Ursache, können Sie meine Antwort unter – GOLDEE

Antwort

1

Ich habe endlich die Lösung gefunden! Setzen Sie das targetSdkVersion-Tag innerhalb des Manifests auf 21.

+0

Nein, immer noch nicht funktionieren – GOLDEE

6

Ich hatte das gleiche Problem, aber ich habe es geschafft, dies zu lösen. Das eigentliche Problem liegt in einem Defekt ist in Bezug auf Hardwarebeschleunigung, also wenn Sie in Ihrem AndroidManifest setzen, ist Ihre Anwendung hardwareAccelerated = "True" Ihr Problem wird gelöst werden.

1

Versuchen Linie zu ändern 1005:

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

zu

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

in SlidingMenu.java