2017-11-22 8 views
0

私は自分のアプリケーションの設定を作成しており、フラグメントを使用しています。PreferenceFragmentCompatスクリーンを作成していましたが、親フラグメントではクリック設定にロードします。私の最初のタッチに応答しませんが、いくつかの短い時間の後、それは正常に動作するか、私は高速または上にスクロールし、それが私のタッチイベントに応答しない直後に任意の好みをクリック誰かが助けてくださいできますか?PreferenceFragmentCompat inside(child of)フラグメント最初のタッチイベントをディスパッチするフラグメント

public class SettingsParent extends Fragment { 

Toolbar toolbar; 
private HomeActivity homeActivity; 


@Override 
public View onCreateView(LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 



    setHasOptionsMenu(true); 

    homeActivity = ((HomeActivity) getActivity()); 




    View rootView = inflater.inflate(R.layout.settings_parent, container, false); 

    toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); 

    setTitle(getString(R.string.settings)); 

    setFragment(new SettingsFragment()); 

    homeActivity.setSupportActionBar(toolbar); 

    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      homeActivity.onBackPressed(); 

     } 
    }); 

    rootView.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.e("SettingTouch","parent"); 
      return true; 
     } 
    }); 

    android.support.v7.app.ActionBar actionBar = homeActivity.getSupportActionBar(); 
    assert actionBar != null; 
    actionBar.setDisplayHomeAsUpEnabled(true); 

    return rootView; 
} 


private void setTitle(String string) { 
    toolbar.setTitle(string); 
} 



@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    //inflater.inflate(R.menu.browser_options_menu, menu); 

    menu.setGroupVisible(R.id.grp, false); 
    super.onCreateOptionsMenu(menu, inflater); 

} 

void setFragment(Fragment newFragment){ 
    FragmentManager fragmentManager = getChildFragmentManager(); 
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

    android.support.v4.app.FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 

    ft.replace(R.id.childF, newFragment, "detailFragment"); 

    ft.commit(); 
} 

}

これはparentFragmentのXMLです。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 



    <android.support.design.widget.AppBarLayout 
     android:id="@+id/main.appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 


     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

    </android.support.design.widget.AppBarLayout> 


    <include layout="@layout/child_fragment" /> 

</android.support.design.widget.CoordinatorLayout> 

これは私の子供PreferenceFragmentCompatです。私は、直接私の活動から子フラグメント(SettingsParent)をロードした場合、それはaction barなしで完璧に動作しますが、

public class SettingsFragment extends PreferenceFragmentCompat implements HomeActivity.Authentication, Preference.OnPreferenceClickListener, SharedPreferences.OnSharedPreferenceChangeListener, ConfirmAlertDialog.OnDialogClickInterface { 
@Override 
public boolean onPreferenceClick(final Preference preference) { 
    final String key = preference.getKey(); 

    switch (key) { 
     case "remove_ads": 
      homeActivity.purchaseRemoveAds(); 
      break; 
     case "hide_icon": 
      try { 
       homeActivity.loadFragment(new HideOptiosTutorial(), getParentFragment().getFragmentManager().beginTransaction()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      break; 

     case "key_share_app_link": 
      shareAppFile(); 

      break; 

     case "move_to_sdcard": 

      showMovetoSdDialog(); 

      break; 
     case "button_internal": 

      showMovetoInternalDialog(); 

      break; 
     case "back_up_sdcard": 
      if (isSDCardUnmounted()) { 
       showSDCardMountError(); 
      } else { 

       globalPasswords = getBackupPasswords(); 

       if (!FileUtilis.isSafAllowed(getActivity())) { 
        showSDCardNotAllowedDialog(983); 
        // 
        return false; 
       } 

       if (globalPasswords.size() == 0) { 
        showNoBackupFoundMsg(); 
       } else { 
        showDialogToBackupFromSDCard(); 
       } 
      } 
      break; 
     case "change_password": 
      showChangePinDialog(); 
      break; 

     case "key_rate_us": 
      rateApplication(); 
      break; 
     case "app_link": 
      SavedAlbumsFragment.showAppLockLink(getActivity()); 
      break; 
     case "view_intruders": 
      startActivity(new Intent(homeActivity, ViewIntruders.class)); 
      break; 
     case "theme": 
      showSelectTehmeDialog(); 
      break; 

     case "enter_email": 

      showChangeEmailDialog(); 
      break; 
    } 


    return false; 
} 
@Override 
public void onCreatePreferences(Bundle bundle, String s) { 
    addPreferencesFromResource(R.xml.pref_headers); 
    Log.e("Mateen","onCreatePreferences"); 

    homeActivity = ((HomeActivity) getActivity()); 
    homeActivity.addAuthenticationListner(this); 
    localDatabase = LocalDatabase.getInstance(getActivity()); 
    localPreferences = new LocalPreferences(getActivity()); 

    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    LocalBroadcastManager.getInstance(homeActivity).registerReceiver(broadcastReceiver,new IntentFilter("Remove_Is_Purchased")); 

    removeAdsPref=findPreference("remove_ads"); 
    mCategory = (PreferenceCategory)findPreference("cat_remove_ads"); 



    if (localPreferences.IsRemovedAdsPurchased()) 
    { 
     mCategory.removePreference(removeAdsPref); 
     getPreferenceScreen().removePreference(mCategory); 
    } 
    else 
    { 
     removeAdsPref.setOnPreferenceClickListener(this); 
    } 

    findPreference("move_to_sdcard").setOnPreferenceClickListener(this); 
    findPreference("view_intruders").setOnPreferenceClickListener(this); 
    findPreference("button_internal").setOnPreferenceClickListener(this); 
    findPreference("back_up_sdcard").setOnPreferenceClickListener(this); 
    findPreference("change_password").setOnPreferenceClickListener(this); 
    findPreference("key_rate_us").setOnPreferenceClickListener(this); 
    findPreference("app_link").setOnPreferenceClickListener(this); 
    findPreference("hide_icon").setOnPreferenceClickListener(this); 
    findPreference("key_share_app_link").setOnPreferenceClickListener(this); 
    findPreference("listPref_wrong_tries").setOnPreferenceClickListener(this); 
    findPreference("theme").setOnPreferenceClickListener(this); 
    findPreference("enter_email").setOnPreferenceClickListener(this); 




    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 
     findPreference("key_cam_short").setVisible(false); 
     findPreference("key_vid_short").setVisible(false); 
    } 

    if (!PreferenceManager.getDefaultSharedPreferences(homeActivity).getBoolean("key_intruder_detection",false)) 
    { 
     findPreference("listPref_wrong_tries").setEnabled(false); 
    } 
    if (!Reprint.isHardwarePresent()) { 
     findPreference("key_fingerprint").setEnabled(false); 
    } 

    if (!FileUtilis.isSdcardPresent(getActivity())) { 
     findPreference("move_to_sdcard").setEnabled(false); 
     findPreference("button_internal").setEnabled(false); 
     findPreference("back_up_sdcard").setEnabled(false); 

     // findPreference("change_password").setEnabled(false); 
     findPreference("always_save_to_sdcard").setEnabled(false); 
    } 
    //add xml 

} 

。 誰かが助けてもよいし、より良いアプローチをとることができますが、私は活動バーを使う必要があります。

答えて

1

私から

  app:layout_scrollFlags="scroll|enterAlways" 

を除去することによって、私の問題を解決しました:D ハッピー

コーディング:今では私のすべてのいまいましいタッチを聴いている

 <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

関連する問題