将checkBoxPreference动态添加到PreferenceFragment

时间:2013-02-27 14:48:08

标签: android

我需要显示我从API获得的文件和文件夹的目录列表。一旦用户点击其中一个目录,我就会查找其子目录并将其列在右侧的父目录下,然后继续。 不确定最好的方法是什么?

我制作了一个设置视图并拥有一个"目录"设置。单击它后,我需要在PreferenceScreen中加载子目录。并且用户必须能够深入到子目录并使用 checkBoxPreference

之类的东西选择他想要的目录

所以最后我可以编制一个Checked Directories列表。

我的想法

  1. 显示文件夹,用户点击文件夹后,将子文件夹滑入视图,依此类推。
  2. 显示文件夹,一旦用户点击文件夹,就会在父文件夹的正下方显示子文件夹,将子项向右移动一点。
  3. 显示选择为 checkBoxPreferences 的文件夹,并有一个按钮以启动用户从中选择文件夹的新视图
  4. 我是Android新手,我不确定如何实现这些?

    请你指点一下我可以尝试一下吗?我不是要求代码示例,只是对一些可能的方法或想法的逻辑解释?

1 个答案:

答案 0 :(得分:3)

你的问题很抽象,所以我不能给你一个具体的答案。

我可以提供一些指导和示例。

动态添加首选项的示例(将EditTextPreference替换为CheckboxPreference)并在此之前获取文件列表:

SettingsActivity (扩展PreferenceActivity)

private void setHomeDirectoryPreference(String home_dir)
{
    final EditTextPreference etp = new EditTextPreference(this);

    etp.setKey("home_directory");
    etp.setTitle("Home directory");
    //...
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

    ((PreferenceScreen) findPreference("initial_preference")).addPreference(etp);
}

列出文件子文件:

file.listFiles();

此外,您可能需要经常检查基础文件是否存在:

f.exists();
  

点击它后,我需要加载子目录   PreferenceScreen

我个人使用PreferenceDialog和ListView:

DialogPreference示例:

public class HiddenFilesDialogPreference extends DialogPreference {

    public static Context ctx;

    public HiddenFilesDialogPreference(Context context, AttributeSet attrs) {
        super(context, attrs);

        this.ctx = context;
    }


    @Override
    protected View onCreateDialogView() {

        LayoutInflater inflater = ((Activity) ctx).getLayoutInflater();

        View vw = inflater.inflate(R.layout.content_view, null);

        ListView lv = (ListView) vw.findViewById(android.R.id.list);

        File[] hidden_files = HiddenFileHandler.getAllHiddenFilesAsFiles();

        HiddenFilesListAdapter adapter = new HiddenFilesListAdapter(ctx, hidden_files);
        lv.setAdapter(adapter);

        return vw;
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);
        persistBoolean(positiveResult);
    }

    @Override
    public void onClick (DialogInterface dialog, int which)
    {
        super.onClick(dialog, which);

        Log.v("which", Integer.toString(which));

        if(which == -1) { //Clear all
            HiddenFileHandler hfh = new HiddenFileHandler(ctx);

            hfh.clearHiddenFiles();
        }
    }

}

然后,在对话框中,您可以设置onClickListeners()来替换对话框内容等。

从具体实施开始,然后返回更具体的问题。