我想在android中創建一個PreferenceFragment。應該有一個項目,允許用戶將他的舊數據庫導入到應用程序中。 在我找到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);
}
我得到這個: 試圖調用虛擬方法'null android.view.View.setOnClickListener(android.view.View $ OnClickListener)'對空引用
所以我不能從settings.xml中獲取項目,我想。
b)我的另一個想法是使用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中沒有Acitivity。
三)我能想到的也只是有一個項目就像是最好的方法點擊
,當我發現我的幫助找到的最接近的是這將打開意圖。這聽起來不像是一個偉大的方式和Si也是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