저는 안드로이드 개발에 초보자입니다. 그래서 내가 필요한 모든 정보를 제공하지 못해서 미안합니다. 기본적으로 나는 기본적인 파일 브라우저를 만들었지 만 조각에있는 모든 파일의 목록보기를 사용하여 다른 것을 시도하려고했습니다.목록보기가있는 조각이 필요할 때 목록을 대체하지 않습니까?
을 내 주요 활동에서 나는이 작업을 수행하는 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은 '아무튼 모든 부분 정리를 할 때, arraylist에 저장 한 현재 디렉토리를 가져 와서 그 디렉토리의 모든 파일을 가져 와서 배열 어댑터의 목록을 사용합니다 :
@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를 다시 호출해야하는 다른 디렉토리로 이동하는 몇 가지 이유로 인해, 왜 이것이 작동하지 않는지 매우 혼란 스러울 조각을 대체하지 않습니다. 선형 레이아웃을 사용하고 listview 대신 버튼을 사용하여이 작업을 수행했습니다. 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의 조각이 응용 프로그램을로드 할 때 조각 클래스를로드했지만 해당 조각을 맨 위에 배치하고 있음을 발견했습니다. 프래그먼트 대체가 호출되었을 때 뷰를 대체하는 것이 아니라 시작 부분에 생성 된 새 프래그먼트를 쌓는 것이 었습니다. 이 문제를 해결하기 위해 새로운 클래스를 만들었습니다.이 클래스는 앱을 laoding 할 때 조각을 초기화하고 볼 수있는 새 조각을 바꾸거나 추가하는 빈 listfrgament입니다. 이것은 더러워서 누군가가 더 나은 방법을 알고 있다면 그것을 idricify. –