2013-01-10 2 views
0

"음악가 목록", 음악 밴드, 연주자 및 작곡가 목록이있는 앱을 만들고 있습니다. 그들은 장르와 상대적 인기에 따라 분류됩니다.
주 활동에서 두 개의 탭이있는 "밴드 목록"활동으로 이동합니다. 그 중 하나는 일반 음악 장르 목록이있는 "장르"탭이며 각 장르를 클릭하면 두 개의 탭이있는 해당 활동으로 전송됩니다. 첫 번째 탭은 "모든"탭이고 다른 탭은 "인기있는"탭입니다. 각각의 탭에는 필터링 된 sqlite 데이터베이스가 포함 된 단편이 있습니다 (필자는 각 단편/장르에 대해 새로운 데이터베이스를 사용하는 대신 다른 단편에서 원하는 것을 보여주기 위해 필터링 된 하나의 큰 데이터베이스를 가짐). 이제는 7 개의 장르와 14 개의 클래스가 있습니다. 2 ("all"및 "popular")가 있습니다.
내가 지금하고 싶은 것은 데이터베이스를 다시 필터링하여 모든 목록에 대해 동일한 조각을 재활용함으로써 클래스 수를 2 개 (모두/인기) 또는 가능한 경우 하나만 줄이는 것입니다. 이렇게하려면 "모든"및 "인기있는"탭 (조각)이 들어있는 활동에 눌러 진 목록 항목 (장르)의 위치를 ​​포함하는 "장르"조각에서 문자열을 보내야합니다. 해당 문자열을 파편으로 보내면 조각을 사용하여 sqlite 데이터베이스를 필터링합니다.크로스 프래그먼트 통신

프래그먼트 커뮤니케이션에 대한 Android 개발자 가이드를 읽으면서 추가해야하지만 코드를 사용하는 방법을 알지 못합니다. 조각을 조금 다르게 만들었으므로 xml에서 그것들을 정의하기 때문에, 나는 그 방법을 사용하는 방법을 모른다. 그리고 그와 같은 것들을 좀 더 사용하라.

public class TabListener<T extends Fragment> implements ActionBar.TabListener { 
    private Fragment mFragment; 
    private final Activity mActivity; 
    private final String mTag; 
    private final Class<T> mClass; 

    public TabListener(Activity activity, String tag, Class<T> clz) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     if (mFragment == null) { 
      mFragment = Fragment.instantiate(mActivity, mClass.getName()); 
      ft.add(android.R.id.content, mFragment, mTag); 
     } else { 
      ft.attach(mFragment); 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     if (mFragment != null) { 
      ft.detach(mFragment); 
     } 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 
} 

감사합니다,
Aleksa

+0

개발자 가이드에 설명 된 콜백 메서드를 사용하고 거기에서 호스트 활동의 변수를 설정할 수 있습니다. 그럼 당신은 다른 조각을 주 활동에서 그 변수를 읽을 수 있습니다 .. –

+0

그게 바로 내가 마지막 단락을 쓴 이유입니다 ... 어떻게'getSupportFragmentManager(). findFragmentById (R.id.article_fragment);' xml에 를 지정할 murtaugh

+0

콜백 메소드를 사용하기 위해 xml에 단편을 정의 할 필요가 없으며 단편의 ID가 정보를주고받을 필요가 없습니다. 왜 findFragmentById()를 사용해야하는지, 콜백을 사용하여 호스트 액티비티에 정보를 전달해야하는지, 그리고 새로운 프래그먼트가 인스턴스화 될 때 프로그래밍 방식으로 정보를 검색하는지 알 수 없다. –

답변

0

좀 더 노력한 후 결국 setArguments() 및 getArguments()를 포기하고 부모 작업에서이 값을 사용했습니다.
public int getPosition(){ return position; }
...이 자식 조각에 : 그것은 주위에 가장 효율적인 방법이 있지만 좋은 작품과 조각 사소한 일에 대한 몇 가지 간단한 데이터를 전송하게하는 경우
position=((ParentActivity) getActivity()).getPosition();
나도 몰라 나를 좋아하는 새 이주자는 있어야합니다. :)

0

프로그래밍 방식으로 조각을 생성하는 태그로를 추가 한 경우, u는 지원을 사용할 수 있습니다 여기에

은 통해 나는 모든 조각을 만드는 오전 TabListener입니다 FragmentManager 메서드 : findFragmentByTag (String 태그)

+0

답장을 보내 주셔서 감사합니다! 현재 장르 조각에서 밴드리스트 활동으로 데이터를 보내고 있는데, 내 의도에 prob를 추가하지 않지만 setArguments() 및 getArguments()를 사용하여 해당 활동의 데이터를 자식 조각으로 보내려고 할 때 이 라인의 nullpointerexception (조각 내)'genre = getArguments(). getInt ("position");'. 어떤 팁? – murtaugh

관련 문제