2012-10-17 4 views
0

대학 프로젝트로 안드로이드 용 파일 관리자를 쓰려고합니다. 내 생각은 뷰 파인더를 사용하여 그 안에 조각을 사용하여 탭이있는 vew를 만드는 것입니다. 사실, 당신이 응용 프로그램을로드 할 때 얻는 첫 번째보기는 sdcard, 음악 등이있는 경로 선택 단편입니다.이 단편에는 해당 폴더의 목록보기가 포함되어 있습니다. 항목을 클릭하면 다른 조각이 호출기에 추가되기를 원하며 잘 작동합니다. 그러나 현재 조각을 "클릭 된"폴더의 격자보기로 바꾸기를 원합니다. 그건 작동하지 않습니다. File []의 arraylist를 사용하여 내가 선택한 각 폴더에 파일을 저장합니다. 또한 프래그먼트 어댑터 내부에 메소드를 추가하여 프래그먼트 어셈블러에서 프래그먼트를 추가하고 바꿉니다. 거래를 시도하고 내 목록과 함께 목록이 올바르게 업데이트되었지만보기가 올바르지 않습니다. 다음 코드는 프래그먼트를 대체 할 내 프래그먼트 어댑터 내부의 메소드입니다. 그것은 내 목록보기로 설정된 onItemclicklistenr 내에서 호출한다 : 나는,이 문제에 대한 몇 가지 답변을 읽고, 아무것도 작동하는 것 같다없는 거의 모든 노력을항목 클릭시 현재 조각 전환

public void replaceFragment(SherlockFragment newFragment, int pos) { 
    SherlockFragment old=fragments.get(pos); 
    fragments.set(pos, newFragment); 
    notifyDataSetChanged(); 

}

. 어떤 도움이 절실히 받아 들여질 것입니다.

답변

0

당신의 언어를 말하기 위해서는 Activity을 배워야합니다. 일반적으로 활동은 Interface을 구현해야합니다. 그러면 조각이 통신에 사용됩니다. 그러므로 사용자가 목록 항목을 탭하면 listview가있는 프래그먼트가 부모 인터페이스 (이 인터페이스를 사용하여)에서 "this clicked on this"와 같은 것을 알려야합니다. 그리고 부모 활동은 조각을 대체/추가하면서 나머지 작업을 수행해야합니다. 귀하의 단편은 OOP 에서처럼 다른 단편의 존재를 인식하지 못합니다.

+0

방금 ​​솔루션을 구현했습니다. 내 주요 활동으로 구현 된 "onselectpathlistener"인터페이스를 만들었습니다. 그런 다음 onclick 리스너가 인터페이스에 있도록 코드를 옮기려고했습니다. 이전과 마찬가지로 프래그먼트 목록이 올바르게 업데이트되고 새 프래그먼트가 올바르게 추가되지만보기는 변경되지 않습니다. – ashmikuz

+0

홈 버튼을 누른 다음 응용 프로그램을 다시로드하면 그리드보기가 올바르게 표시됩니다. 어쩌면 내가 잘못 구현, 내가 XML 파일에서 레이아웃을 부풀게하고 어댑터를 설정,이 모든 onCreateView, 내가 배경에서 활동을 다시 가져올 때만 호출하는 것 같습니다. 내가 뭔가 잘못 됐어? – ashmikuz

1

끔찍한 해결책을 발견했습니다. 조각 트랜잭션을 사용하지 않고 조각 목록을 업데이트 한 후보기 호출기에 대한 어댑터를 다시 설정하고 현재 Item을 복원합니다. 이렇게하면 조각 레이아웃을 강제로 만들 수 있습니다. 아름다운 것은 아니지만 무엇이든. 이 인터페이스는 onclick이라고 불리는 인터페이스입니다.

@Override 
    public void onPathSelected(int position) { 
      // TODO Auto-generated method stub 
      Log.d("positioninsideintfc", Integer.toString(position)); 
      firstrun.add(true); 
      int current=mPager.getCurrentItem(); 
      root=(File) filepaths.get(position); 
      fragmentfilelists.add(root.listFiles()); 
      initpath=MainActivity.root.getAbsolutePath(); 
      Gridfragment newfrag=Gridfragment.newInstance(current); 
      mAdapter.addFragment(Selectpathfragment.newInstance(current+1)); 
      mAdapter.replaceFragment(newfrag, current); 
      mPager.setAdapter(mAdapter); 
      mPager.setCurrentItem(current); 
    }