我對Android開發相當陌生,所以如果我沒有提供所有您需要的信息,我很抱歉。基本上我正在構建一個基本的文件瀏覽器,但我想通過查看片段中所有文件的列表視圖來嘗試一些不同的內容。帶有列表視圖的片段應該不會替換列表?
這是我到目前爲止有:
在我的主要活動我有所有的目錄列表視圖,其具有調用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的目錄時,它並不能代替我爲什麼不起作用的片段。我也使用了linearlayout,並使用按鈕而不是listview,它在你進入一個新目錄時工作並替換了片段。
任何人都可以幫忙嗎?謝謝,因爲我很困惑,爲什麼這不起作用。
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,用於初始化應用程序中的片段,然後替換/添加可見的新片段。這是混亂的,所以如果有人知道更好的方式id appriciate它。 –