嘗試設置自定義偵聽器,以便將來自Activity的字符串發送到該活動內部的片段。按下活動按鈕,文本字符串應發送到片段並顯示在該片段的文本視圖中,但我得到一個classCastException,不知道該怎麼做。你如何得到這個工作?設置偵聽器接口時出現ClassCastException
錯誤是在這條線
listener = (OnStringRequestedListener) fragment;
我不知道如何設置這個自定義監聽器接口,而不該行代碼。我使用了類似的代碼行進入相反的方向,它工作。那是或從片段發送消息到活動。但是我試圖今天不工作
堆棧跟蹤
Caused by: java.lang.ClassCastException:
com.example.asynctaskprogressbarexample.InterfaceActivityToFragmentFragment
cannot be cast to com.example.asynctaskprogressbarexample
.InterfaceActivityToFragment$OnStringRequestedListener
at com.example.asynctaskprogressbarexample
.InterfaceActivityToFragment.onCreate(InterfaceActivityToFragment.java:27)
活動類
public class InterfaceActivityToFragment extends Activity {
Button buttonOne;
private OnStringRequestedListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.interface_activity_to_fragment);
Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment1);
listener = (OnStringRequestedListener) fragment; // <-- ERROR ON THIS LINE
if (fragment instanceof OnStringRequestedListener) {
listener = (OnStringRequestedListener) fragment;
} else {
throw new ClassCastException(fragment.toString()
+ " must implemenet OnTimeRequestedListener");
}
buttonOne = (Button) findViewById(R.id.button1);
buttonOne.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
listener.passString("string from Activity");
}
});
}
public interface OnStringRequestedListener {
public void passString(String sendNumberString);
}
}
片段類
public class InterfaceActivityToFragmentFragment extends Fragment implements FragmentHeadlessAsyncTaskFragment.OnStringRequestedListener {
TextView textViewOne;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.interface_activity_to_fragment_fragment, container, false);
TextView textViewOne = (TextView) view.findViewById(R.id.textView1);
return view;
} // end on create view
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
@Override
public void passString(String stringFromActivity) {
textViewOne.setText(stringFromActivity);
}
}
而不是'InterfaceActivityToFragment extends Activity'你試過把類擴展到'FragmentActivity'嗎?即「InterfaceActivityToFragment擴展FragmentActivity」?你也試過使用'getSupportFragmentManager()'而不是'getFragmentManager()'?看看它有什麼區別? –
還沒有嘗試過,但我認爲FragmentActivity是V4支持pre api level 11的舊版本以便與碎片一起使用。因爲我的目標API是11以上。我還沒有想過使用它。我現在會嘗試 – Kevik
實際上,這將比我想象的要困難,我需要更改應用程序並添加V4支持才能使用FragmentActivity – Kevik