如何获取所有共享首选项都包含相同的名称

How to get all sharedpreferences contains same name

我想将所有同名的共享首选项放在一起(在微调器中)。

现在我只能获取所有共享首选项我不知道如何获取相同名称的共享首选项,如 alarm1、alarm2、alarm3、alarm4、alarm5。

final File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");
String[] list = prefsdir.list();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, android.R.id.text1,list);
Spinner sp = (Spinner) findViewById(R.id.tum_ilaclar);
p.setAdapter(adapter);

没看懂,还是用for循环吧

  SharedPreferences.Editor editor = sharedpreferences.edit();            
    for(int i=1;i<list.length;i++){
        editor.putString("alarm"+i,value);
   }

我明白你想要什么。您可以像那样过滤 prefsdir.list() 列表并创建您的适配器。

ArrayList<String> filtered_list = new ArrayList<String>()
for(String item : prefsdir.list()){
   if(item.startWith("alarm")){
      filtered_list.add(item)
   }
}

但这不是保存数据的好方法。至于我,你可以为此使用数据库。您可以轻松实现 orm library like activeandroid.

使用过滤器列出文件

final File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");
String[] list = prefsdir.list(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String filename) {
        return filename.startsWith("alarm");
    }
});

删除文件扩展名

这是我之前写的FileUtilclass。它使用一般方法从路径 with/without 扩展名获取文件名。您可以只使用它来循环筛选列表以获得您想要的内容。

package com.example.utils;

import java.io.File;

public final class FileUtil {
    public static String getFilename(String path) {
        if (path == null) {
            return null;
        }
        String[] segments = path.split(File.separator);
        return segments[segments.length - 1];
    }

    public static String getFilenameNoExt(String path) {
        if (path == null) {
            return null;
        }
        String filename = getFilename(path);
        int extension = filename.lastIndexOf(".");
        return (extension >= 0) ? filename.substring(0, extension) : filename;
    }

    private FileUtil(){}
}