Я хочу создать PreferenceFragment в android. Должен быть элемент, который позволяет импортировать свою старую базу данных в приложение. Прежде, чем я нашел PreferenceFragment, я использовал свой собственный параметр SettingsFragment, но, как кажется, он лучше (и для всего остального, кроме этого, это atm) я попытался использовать это.Создание намерения, щелкнув элемент в PreferenceFragment
Моя проблема в том, что я использовал startActivityForResult с намерением получить файл и импортировать базу данных. Это вызвано кнопкой buttonclick. В новом фрагменте предпочтений у меня действительно нет способа получить клики.
Вот мой Settings.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.myContainer.myApp.helper.ImportDatabaseSettingsDialog
android:id="@+id/database1"
android:key="import_database"
android:title="@string/importDatabaseFromDB" />
<SwitchPreference
android:key="pref_beta"
android:title="@string/enableBeta"
android:summary="@string/enableBetaSummary"
android:defaultValue="false" />
<Preference
android:id="@+id/database2"
android:key="import_database"
android:title="@string/importDatabaseFromDB" />
<ListPreference
android:id="@+id/database3"
android:key="import_database"
android:title="@string/importDatabaseFromDB" />
</PreferenceScreen>
idead я имел
а) Я попытался получить OnClickListeners
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
View data1 = mSettingsFragmentView.findViewById(R.id.database1);
View data2 = mSettingsFragmentView.findViewById(R.id.database2);
View data3 = mSettingsFragmentView.findViewById(R.id.database3);
data1.setOnClickListener(this);
data2.setOnClickListener(this);
data3.setOnClickListener(this);
}
Я получаю это: попытка вызвать виртуальный метод 'void android.view.View.setOnClickListener (android.view.View $ OnClickListener)' на ссылке нулевого объекта
Так что я не могу получить элементы из settings.xml.
б) В другой идее, которую я использовал, был использован диалог DialogPreference. Я использую те же параметры settings.xml, что и выше.
package com.pi314.mylife.helper;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.Toast;
import com.pi314.mylife.R;
import static android.app.PendingIntent.getActivity;
import static android.support.v4.app.ActivityCompat.startActivityForResult;
/**
* Created on 20.09.2015.
*/
public class ImportDatabaseSettingsDialog extends DialogPreference {
private static final int SELECT_DATABASEFILE = 1;
public ImportDatabaseSettingsDialog(Context context, AttributeSet attrs) {
super(context, attrs);
//setDialogLayoutResource(R.layout.numberpicker_dialog);
setDialogMessage(R.string.ARE_YOU_SURE_YOU_WANT_IMPORT);
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
setDialogIcon(null);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
Log.d("ml Settings", "importing database");
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
Intent finalIntent = Intent.createChooser(intent, "Select databasefile");
startActivityForResult(finalIntent, SELECT_DATABASEFILE);
}
}
}
Но я не могу использовать startActivityForResult как я не имею актив- ности в моем DialogPreference.
с) Лучше всего я мог думать только будет иметь элемент, как и в том, что открывает намерение при нажатии
Ближайший я нашел помощь, которую я нашел, было это. Это не звучит как отличный способ и си также 3-х лет, и я действительно не понимаю, как получить DialogPreference объект в моем классе настройки:
startactivityforresult from dialogpreference (non activity)
ПОЛЕЗНЫЕ ссылки:
http://developer.android.com/reference/android/preference/DialogPreference.html
http://developer.android.com/guide/topics/ui/settings.html