Preference.setLayoutResource(R.layout.my_custom_layout) 不接受 OnClickListener
Preference.setLayoutResource(R.layout.my_custom_layout) don't accept OnClickListener
我正在尝试设置一个简单的 SettingsFragment,其中包含一个使用布局自定义的首选项 xml,并在此自定义首选项上设置 OnClickListener。这一刻 none 的方式工作。
请问我想念什么?
我尝试了 OnPreferenceClickListener 和 OnPreferenceTreeClickListener 的实现,但没有成功。
这是我的delete_btn_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/delete_account_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.example.package.SettingsActivity">
<Button
android:id="@+id/delete_account_btn"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="@dimen/size_b"
android:text="@string/delete_account"
android:textColor="@android:color/white"
android:background="@drawable/background_btn"
android:layout_margin="@dimen/size_s" />
</LinearLayout>
这是我在
中的首选项元素
...
<PreferenceCategory app:title="@string/account_category">
<Preference
app:icon="@drawable/ic_delete_primary_dark_24"
app:key="delete_account"
app:title="@string/delete_account"/>
</PreferenceCategory>
...
这是我的 SettingsFragment,其中一个“...ClickListener” 不起作用
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
Preference test = SettingsFragment.this.findPreference("delete_account");
if (test != null) {
test.setLayoutResource(R.layout.delete_btn_layout);
test.setOnPreferenceClickListener(preference -> {
ViewWidgets.showSnackBar(1,getView(),"delete ?");
// do some action
return true;
});
} else {
ViewWidgets.showSnackBar(1,getView(),"Error, Please retray.");
}
}
请帮忙。
对于可能遇到类似问题的人,我描述一下我应用的解决方案。
点击的事件检测,我插入到持有SettingsFragment的activity(class SettingsActivity
)中。使用初始化进程的“deleteUserAccount”方法:
public void deleteUserAccount(View view) {
openDialog();
}
我使用“onClick”方法以旧方式在按钮中插入了此事件的参考:
<Button
android:id="@+id/delete_account_btn"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="@dimen/size_b"
android:text="@string/delete_account"
android:textColor="@android:color/white"
android:background="@drawable/background_google_btn"
android:layout_margin="@dimen/size_s"
android:onClick="deleteUserAccount"/>
我正在尝试设置一个简单的 SettingsFragment,其中包含一个使用布局自定义的首选项 xml,并在此自定义首选项上设置 OnClickListener。这一刻 none 的方式工作。 请问我想念什么?
我尝试了 OnPreferenceClickListener 和 OnPreferenceTreeClickListener 的实现,但没有成功。
这是我的delete_btn_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/delete_account_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.example.package.SettingsActivity">
<Button
android:id="@+id/delete_account_btn"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="@dimen/size_b"
android:text="@string/delete_account"
android:textColor="@android:color/white"
android:background="@drawable/background_btn"
android:layout_margin="@dimen/size_s" />
</LinearLayout>
这是我在
中的首选项元素... <PreferenceCategory app:title="@string/account_category"> <Preference app:icon="@drawable/ic_delete_primary_dark_24" app:key="delete_account" app:title="@string/delete_account"/> </PreferenceCategory> ...
这是我的 SettingsFragment,其中一个“...ClickListener” 不起作用
public static class SettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.root_preferences, rootKey); Preference test = SettingsFragment.this.findPreference("delete_account"); if (test != null) { test.setLayoutResource(R.layout.delete_btn_layout); test.setOnPreferenceClickListener(preference -> { ViewWidgets.showSnackBar(1,getView(),"delete ?"); // do some action return true; }); } else { ViewWidgets.showSnackBar(1,getView(),"Error, Please retray."); } }
请帮忙。
对于可能遇到类似问题的人,我描述一下我应用的解决方案。
点击的事件检测,我插入到持有SettingsFragment的activity(class SettingsActivity
)中。使用初始化进程的“deleteUserAccount”方法:
public void deleteUserAccount(View view) {
openDialog();
}
我使用“onClick”方法以旧方式在按钮中插入了此事件的参考:
<Button
android:id="@+id/delete_account_btn"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="@dimen/size_b"
android:text="@string/delete_account"
android:textColor="@android:color/white"
android:background="@drawable/background_google_btn"
android:layout_margin="@dimen/size_s"
android:onClick="deleteUserAccount"/>