2017-04-04 71 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