我有一個有趣的問題,我試圖解決列表視圖適配器和片段之間的通信。我對使用接口很陌生,所以請耐心等待。ListAdapter和片段之間的接口
在我的列表視圖適配器,我需要觸發父片段的變化 - 特別是int
成員mediaId
:
FragmentTitle extends Fragment implements FragmentManager.OnBackStackChangedListener,
MediaListView.OnMediaTitleSelectedListener {
private int mediaId;
// Other properties, methods, etc
// Required interface method implementation
@Override
public void onMediaTitleSelected(int i) {
mediaId = i;
}
}
我寫的接口在MediaListView適配器類這樣:
public interface OnMediaTitleSelectedListener {
void onMediaTitleSelected(int i);
}
在適配器(MediaListView
)的getView()
方法,有調用一個onClick方法:
...
// mediaId instantiated here
final int itemMediaId = foo.getMediaId();
OnMediaTitleSelectedListener callback;
item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// I need to "trigger" the event here
callback.onMediaTitleSelected(itemMediaId);
// Other stuff done here... yadda yadda
}
}
現在,我知道我需要實例化這個接口,以免引發NullPointerException異常,而我試圖MediaListView
類內這樣做:
OnMediaTitleSelectedListener callback = new OnMediaTitleSelectedListener() {
@Override
public void onMediaTitleSelected(int i) {
Log.i(TAG, "onMediaTitleSelected: "+ i);
}
};
上面確實記錄了點擊的結果,但由於這在MediaListView
類中,它不會將事件觸發到FragmentTitle
,即使這兩個參數在同一個佈局中並排排列。我也不明白爲什麼以上是必要的,因爲我在MediaListView
中沒有使用此接口實現,只有FragmentTitle
。
這樣做的原因是所有更新包outState
配置更改 - FragmentTitle
,其中MeidaListView
是一個孩子需要更新的最後點擊mediaId
,使屏幕旋轉後,同樣的事情出現了。
我該怎麼做呢?現在,我將該值添加到另一個類中的靜態成員以「保留」mediaId
的值,但有些事情告訴我這不是「正確」的方式。
感謝您的幫助!
感謝您的輸入! – mwieczorek