0

我想在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

回答

0

我自己解決了。所以這裏是解決方案,如果有人感興趣。 我現在在settings.xml中使用Preferences並在我的片段中創建onPreferenceClickListener。

的settings.xml:

<Preference 
    android:key="export_database" 
    android:summary="@string/exportDatabasefileSummary" 
    android:title="@string/exportDatabasefile" /> 

<Preference 
    android:key="import_database" 
    android:summary="@string/importDatabaseFromDBSummary" 
    android:title="@string/importDatabaseFromDB" /> 

片段:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Load the preferences from an XML resource 
    addPreferencesFromResource(R.xml.settings); 

    Preference preferenceImportDatabase = findPreference("import_database"); 
    preferenceImportDatabase.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference preference) { 
      importDatabaseFromDB(); 
      return false; 
     } 
    }); 

    Preference preferenceExportDatabase = findPreference("export_database"); 
    preferenceExportDatabase.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference preference) { 
      exportDatabasefile(); 
      return false; 
     } 
    }); 
} 
相關問題