【发布时间】:2015-12-27 20:26:23
【问题描述】:
在寻找解决我的问题的方法时,我已经广泛阅读了关于 S/O 的各种答案,但现在似乎在兜圈子,因为似乎没有任何一致的方法来解决我的问题DialogFragment (DF) 创建和处理我已经能够用来解决我的问题。
我正在运行一个包含许多普通片段的活动。我创建了一个 DF 来处理我希望用户从中选择一个文件的列表,然后将其导入(到 SQLite 数据库文件中)。 我正在通过以下代码从我的 MainActivity 创建 DF(通过在普通片段中单击按钮引发):-
public void importdb(View view) {
NewFileChooser newFileChooser = new NewFileChooser();
newFileChooser.setTargetFragment(newFileChooser, FILE_CHOOSER);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.addToBackStack(null);
newFileChooser.show(ft, "Diag");
}
在“NewFileChooser”中,DF 是在 OnCreateView 方法中创建的:-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.new_layout, container, false);
list = (ListView)view.findViewById(R.id.file_list);
Context c = getActivity();
currentDir = new File("/sdcard/PH100-Backup");
fill(currentDir);
Dialog mydialog = getDialog();
mydialog.setTitle("Choose a database File to Import");
//list.setOnClickListener(???????????); // position to set listener ??
return view;
}
下面显示的 'fill(currentDir)' 方法使用 2 个附加类,使用 ArrayAdapter 方法从 sdcard /backup 目录获取文件并在 DF 的列表区域中显示此排序列表。
这部分工作正常,创建 DF 并显示列表,如果您单击列表中的任何文件,背景会变亮,表明您正在启动事件,但这是我所能得到的。
private void fill(File f) {
File[] dirs = f.listFiles();
getDialog().setTitle("Current Dir: " + f.getName());
List<Option> dir = new ArrayList<Option>();
List<Option> fls = new ArrayList<Option>();
try {
for (File ff : dirs) {
if (ff.isDirectory())
dir.add(new Option(ff.getName(), "Folder", ff.getAbsolutePath()));
else {
fls.add(new Option(ff.getName(), "File Size: " + ff.length(), ff.getAbsolutePath()));
}
}
} catch (Exception e) {
}
Collections.sort(dir);
Collections.sort(fls);
dir.addAll(fls);
if (!f.getName().equalsIgnoreCase("sdcard"))
adapter = new FileArrayAdapter(getActivity(), R.layout.file_view, dir);
list.setAdapter(adapter);
}
代码大部分是从“勾选”的答案File Chooser inside DialogFragment (re-using code)中提取的
我已根据我的情况对其进行了修改,并且它有效,但仅限于我上面提到的。
通过阅读 S/O 上的许多现有答案,我不确定我是否已经陷入困境。许多答案都有与他们关联的侦听器使用的按钮,我没有,因此无法使用他们的代码(尤其是侦听器)来解决我的问题,其他人使用
启动 DF
-- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); --
我没有使用的代码构造。 (我确实尝试过使用这种方法,但 .setItems 动词不喜欢我动态构建的文件列表,它只想要一个固定的数组,我无法让它工作)。
显然,我需要使用侦听器接口来将文件名返回到 MainActivity,但我不知道如何使其正常工作。 我尝试使用实现 AdapterView.OnItemSelectedListener 的 NewFileChooser,这迫使我实现下面的方法
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
但我也无法让它工作。我正在使用 Android Studio,即使使用代码完成助手,我似乎也被卡住了。
恐怕这看起来像是……当您知道自己陷入困境时停止挖掘……!因此,我们将非常感谢您的任何帮助
【问题讨论】:
标签: android listview android-fragments onclicklistener dialogfragment