2017-04-04 70 views
0

我通過擴展PreferenceFragment來創建一個設置片段。我需要知道用戶何時在通過在父容器上設置onClick事件來處理常規片段的片段視圖(整個視圖)中單擊。但是,當我使用PreferenceFragment時,這不起作用。我在我的activity_main.xml中以下設置:如何在PreferenceFragment上獲取onClickEvent?

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rootView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:onClick="clickedView">  <---- Observe this click event on the parent view 

    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</FrameLayout> 

這是PreferenceFragment:

public class SettingsFragment extends android.preference.PreferenceFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences);   
     //Can I do something here to handle the click event?? 
    } 

} 

所以,如果我添加了一個普通的片段,當我點擊屏幕onClick事件被稱爲但是當我用PreferenceFragment替換它時不會調用它。我猜PreferenceFragment處理它自己的點擊事件,並不會將它「推到」其他視圖。是否有可能在PreferenceFragment上獲得onClickEvent?

回答

0

我結束了覆蓋下面的函數他們到達PreferenceFragment之前攔截觸摸事件:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if(ev.getAction() == MotionEvent.ACTION_UP){ 
     //Do what needs to be done 
    } 
    return super.dispatchTouchEvent(ev); 
} 

如果有人有更好的解決方案,隨時分享它

0

你可以讓你的SettingsFragment到執行OnClickListener並通過overridingOnCreateView()OnClick()方法處理Fragment本身中的點擊事件。

public class SettingsFragment extends android.preference.PreferenceFragment implements View.OnClickListener { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     //View view = inflater.inflate(R.layout.fragment_settings, container, false); 
     View view = super.onCreateView(inflater, container, savedInstanceState); 

     view.setOnClickListener(this); 
     return view; 
    } 

    @Override 
    public void onClick(View v) { 
     if(v.getId() == R.id.settings_fragment){ 
      Log.d("TAG", "Settings fragment clicked"); 
      //Do whatever you want 
     } 
    } 
} 

希望這有助於!

+0

我正在使用'addPreferencesFromResource(R.xml.preferences);'來創建PreferenceFragment。即使我在用getView()返回的視圖上設置了onClickListener,它也不會被稱爲 – FewWords

+0

@FewWords我更新了答案。嘗試這個。 – Prashanth

+0

這是爲你工作嗎?因爲我現在試圖將你的代碼複製到一個完整的新項目中,但我仍然沒有進入onClick事件。如果我嘗試使用「OnTouchListener」,則會發生同樣的事情。 – FewWords