Android 自定义首选项-按钮不可单击

Android 自定义首选项-按钮不可单击,android,android-fragments,preference,Android,Android Fragments,Preference,我正在设置屏幕上工作,我正在使用Android的首选API来构建界面。 其中一个首选项是按钮,我通过向首选项添加自定义布局来实现。它可以工作-按钮按我想要的方式显示,但问题是当设置为On PreferenceClickListener时,什么也没有发生。它没有被触发 我尝试在按钮布局根目录中添加BeforeDescents,但没有成功。还试图添加可聚焦假按钮,但仍然没有运气 任何人都可以分享一些技巧,我可以如何使首选按钮的反应? 谢谢 我会使用类似于下面代码的东西来实现这一点: @Overrid

我正在设置屏幕上工作,我正在使用Android的首选API来构建界面。 其中一个首选项是按钮,我通过向首选项添加自定义布局来实现。它可以工作-按钮按我想要的方式显示,但问题是当设置为On PreferenceClickListener时,什么也没有发生。它没有被触发

我尝试在按钮布局根目录中添加BeforeDescents,但没有成功。还试图添加可聚焦假按钮,但仍然没有运气

任何人都可以分享一些技巧,我可以如何使首选按钮的反应?
谢谢

我会使用类似于下面代码的东西来实现这一点:

@Override
protected View onCreateView (ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View customRow = inflater.inflate(R.layout.preferences_station_list_row, null);
    ((ImageButton) customRow.findViewById(R.id.pref_delete_station)).setOnClickListener(new OnClickListener() {      
        @Override
        public void onClick(View v) {
           //perform whatever you need to button to do here.
        }
    });

    customRow.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(null);
        }
    });
    customRow.setClickable(true);
    return customRow;
}

这是否解决了您的问题?

首选项单击是在单击首选项时触发的,而不是在单击按钮时触发的。如果要捕获按钮单击,则需要在按钮本身上设置OnClickListener。问题是检索膨胀的按钮,因为首选项类没有findViewById方法或任何类似的方法。我是这样做的:

  • 创建自定义首选项类并重写onCreateView
  • 在onCreateView方法中,从超类中获取膨胀的布局并找到按钮
  • 将OnClickListener添加到按钮
  • 在首选项布局文件中使用自定义首选项类
  • 公共类CustomPreference扩展了首选项{
    公共自定义首选项(上下文){
    超级(上下文);
    }
    公共自定义首选项(上下文、属性集属性){
    超级(上下文,attrs);
    }
    公共自定义首选项(上下文上下文、属性集属性、int-defStyle){
    超级(上下文、属性、定义样式);
    }
    @凌驾
    受保护的视图onCreateView(视图组父级){
    视图首选项视图=super.onCreateView(父级);
    setOnClickListener(首选项视图);
    返回优先视图;
    }
    私有void setOnClickListener(视图首选项视图){
    if(preferenceView!=null&&preferenceView实例视图组){
    ViewGroup widgetFrameView=((ViewGroup)preferenceView.findViewById(android.R.id.widget_frame));
    if(widgetFrameView!=null){
    //找到按钮
    按钮按钮=空;
    int count=widgetFrameView.getChildCount();
    for(int i=0;i
    这将替换xml文件中的首选项:

    <yourpackage.CustomPreference
        android:key="your_id"
        android:title="@string/your_title"
        android:summary="@string/your_summary"/>
    
    
    
    重写“”from方法,并确保您的自定义布局没有以下内容:

     android:clickable="true"
    

    您不需要任何其他特殊功能,但如果您的布局包含android:clickable=“true”视图,则会完全搞乱它。

    您是否检查了答案?我不知道这有什么关系?“您必须注册首选项ClickListener每个个人首选项somePreference.SetonPreference ClickListener(this);”我也会建议张贴你的代码,我正在这样做。我已经说过我正在设置此首选项的首选项ClickListener,但是当单击按钮时,什么都没有发生。在调用侦听器启用按钮之前,您是否尝试过<代码>myButton.setEnabled(真)
     android:clickable="true"