问题
I want to use Snackbar onSharedPreferenceChange() inside my PreferenceFragment hosted by a Activity.
preference.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="ll_main">
<PreferenceCategory android:title="@string/push_notification">
<SwitchPreference android:title="@string/transectional_notification"
android:key="trans_not"
android:defaultValue="true"
android:summary="@string/get_notified_about_any_changes_related_to_your_transections"/>
<SwitchPreference android:title="@string/promotional_notification"
android:key="prom_not"
android:defaultValue="true"
android:summary="@string/get_notified_about_referalls"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/other_notifications">
<SwitchPreference android:title="@string/email_notifications"
android:defaultValue="true"
android:key="email_not" />
<SwitchPreference android:title="@string/sms_notifications"
android:defaultValue="true"
android:key="sms_not"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/recommendation_setting">
<com.til.recharger.widgets.PhoneEditTextPreference
android:title="@string/mobile_no"
android:inputType="number"
android:summary="8587035342"
android:key="mob_no_edit"/>
<ListPreference android:title="@string/operator"
android:summary="Airtel"
android:key="operator_list"/>
<ListPreference android:title="@string/circle"
android:summary="New Delhi"
android:key="circle_list"/>
<ListPreference
android:title="Plan type"
android:entries="@array/listentries"
android:entryValues="@array/listentries"
android:summary="Postpaid"
android:defaultValue="Prepaid"
android:key="plan_key"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/plan_info">
<com.til.recharger.widgets.NumberPickerPreference
android:title="@string/bill_cycle"
android:summary="2"
android:persistent="true"
android:key="bill_cycle_edit"/>
<com.til.recharger.widgets.CustomEditTextPreference
android:title="@string/monthly_data_limit"
android:summary="%s"
android:inputType="number"
android:key="monthly_limit_edit"/>
<ListPreference
android:title="@string/preffered_network_type"
android:entries="@array/mobiledataoptions"
android:entryValues="@array/mobiledatavalues"
android:summary="3G"
android:defaultValue="3G"
android:key="pref_data_list"/>
</PreferenceCategory>
</PreferenceScreen>
My function for showing snackbar is :
public void hideKeyWithError(final String error) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
AppUtils.hide_keyboard(getActivity());
Snackbar.make(view,error,Snackbar.LENGTH_LONG).show();
}
}, (300));
}
I don't know what to pass as 'view' to snackbar to show it.
PS : I tried passing PreferenceScreen to Snackbar, But didn't work out. Thanks in Advance.
回答1:
Try this for get view
View view = getView();
So the code is.
public void hideKeyWithError(final String error) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
View view = getView();
AppUtils.hide_keyboard(getActivity());
Snackbar.make(view,error,Snackbar.LENGTH_LONG).show();
}
}, (300));
}
回答2:
View
param of Snackbar.make()
means a view on which Snackbar
can find parent to display Snackbar
on the top of screen
Snackbar will try and find a parent view to hold Snackbar's view from the value given to view
Link
来源:https://stackoverflow.com/questions/32369169/unable-to-show-snackbar-from-preferencefragment