【发布时间】:2011-10-05 11:49:22
【问题描述】:
我对 Android 开发还很陌生,所以如果我没有提供您需要的所有信息,我很抱歉。基本上我正在构建一个基本的文件浏览器,但我想通过一个片段中所有文件的列表视图来尝试一些不同的东西。
这是我目前所拥有的:
在我的主要活动中,我有一个 listView 用于所有目录,它有一个调用 stackAFragment 的 onclick 事件:
public class Main extends Activity implements OnItemClickListener {
private File RootDir;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**Initialize the current directory when the main activity is created**/
RootDir = new File("/sdcard/Docs/");
Files_Main.setCurDir(RootDir);
ListView l = (ListView) findViewById(R.id.dir_list);
ArrayAdapter<String> directories = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,
Files_Main.getFolderList(RootDir));
l.setAdapter(directories);
l.setOnItemClickListener(this);
stackAFragment(RootDir.toString());
}
/**
* Add a Fragment to our stack
*/
private void stackAFragment(String dir) {
File myFile = new File(dir);
Fragment f = new FilesFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.files_frag, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
我的 FilesFragment 不做任何特别切割的事情,它只是获取我保存在数组列表中的当前目录并获取该目录中的所有文件并在数组适配器中使用该列表,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved)
{
Context c = getActivity().getApplicationContext();
File curDir = Files_Main.getCurDir();
Toast.makeText(getActivity(), (curDir.toString()), Toast.LENGTH_SHORT).show();
/** setup layouts **/
LinearLayout main = new LinearLayout(c);
ListView list = new ListView(c);
/**Get a list of files from the current directory we are viewing**/
String[] FilesList = Files_Main.getFileList(curDir);
/**put list into a array adapter**/
ArrayAdapter<String> files = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1,
FilesList);
/**Set list view to contain items from array adapter**/
list.setAdapter(files);
list.setOnItemClickListener(this);
/**Attach the list view to the LinearLayout view**/
main.addView(list);
/**Return LinearLayout View with list view as the fragment to display**/
return main;
}
但是由于某种原因,当我运行它并进入另一个应该使用不同目录重新调用 stackAFragment 的目录时,它不会替换我很困惑为什么这不起作用的片段。我还使用线性布局并使用按钮而不是列表视图来完成此操作,当您进入新目录时,它可以工作并替换片段。
有人可以帮忙吗?谢谢,因为我很困惑为什么这不起作用。
public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
{
File targetDir;
ListView l = (ListView) findViewById(R.id.dir_list);
if(parent.getItemAtPosition(pos).toString() == "...")
{
/**
* This is going up a directory by deleting the last entry of the directory arraylist.
* **/
targetDir = Files.getPreviousDir();
Files.setPreviousDir();
}
else
{
/**
* Sets the item clicked on as the target directory we want to browse and adds it
* to the directory arraylist.
* **/
targetDir = new File (Files.getCurDir() + "/" +
parent.getItemAtPosition(pos).toString());
Files.setCurDir(targetDir);
}
ArrayAdapter<String> directories = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,
Files.getFolderList(targetDir));
l.setAdapter(directories);
l.setOnItemClickListener(this);
stackAFragment(targetDir.toString());
}
【问题讨论】:
-
你能发布你的 onItemClick 方法吗?
-
按要求添加了onitemclick方法,谢谢。
-
我已经设法以一种被黑的方式解决了我的问题。我基本上发现 layout.xml 中的片段在加载应用程序时正在加载片段类,但将该片段放在顶部。当调用片段替换时,它并没有替换视图,而是创建了一个新片段,该片段堆叠在开始时创建的片段后面。为了解决这个问题,我创建了一个新类,它是一个空的 listfrgament,用于在加载应用程序时初始化片段,然后替换/添加可见的新片段。这很混乱,所以如果有人知道更好的方法,请务必使用它。
标签: android listview android-fragments