У меня есть Основное действие. в основной деятельности, в Oncreat {}, я создающий фрагмент с именем «Channellist» Кодом:Необходимо реализовать интерфейс при реализации этого интерфейса в действии
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initVtcId();
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
if (fm.findFragmentById(android.R.id.tabcontent) == null) {
FragmentTransaction fragmentTransaction = fm.beginTransaction();
ChannelList list = new ChannelList();
//fragmentTransaction.add(android.R.id.content, list);
fragmentTransaction.add(android.R.id.tabcontent, list);
fragmentTransaction.commit();
}
Для Одере Channellist общаться до активности с именем «ChannelActivity». Я использую интерфейс с именем «OnListItemSelectedListener» и его метод «onListItemSelected» в Channellist
public class ChannelList extends ListFragment {
private OnListItemSelectedListener mCallback;
public interface OnListItemSelectedListener {
public void onListItemSelected(ListView l, int position);
}
Обломок Channellist фиксирует реализацию интерфейса во время его onAttach) метод жизненного цикла (
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception.
try {
mCallback = (OnListItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnListItemSelectedListener");
}
}
следующий метод в фрагмент вызывается, когда пользователь нажимает на элемент списка. Фрагмент использует интерфейс обратного вызова для доставки события родительской активности.
public void onListItemClick(ListView l, View v, int position, long id) {
mCallback.onListItemSelected(l, mChannelAdapter.getItem(position)
.getID());
}
На ChannelActivity я реализую этот интерфейс и его метод для вызова фрагмента с именем «ChannelDetailFragment»
public class ChannelActivity extends FragmentActivity implements
ChannelList.OnListItemSelectedListener {
private FragmentManager fm;
private Fragment mChannelDetailFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.channel_activity);
fm = getSupportFragmentManager();
Fragment mChannelListFragment = fm
.findFragmentByTag(ChannelList.TAG);
if (mChannelListFragment == null) {
addFragment(new ChannelList(), false,
ChannelList.TAG);
}
}
@Override
public void onListItemSelected(ListView l, int position) {
Bundle args = new Bundle();
args.putInt(ChannelDetailFragment.CHANNEL_ID, position);
mChannelDetailFragment = fm
.findFragmentByTag(ChannelDetailFragment.TAG);
if (mChannelDetailFragment == null) {
mChannelDetailFragment = new ChannelDetailFragment();
}
mChannelDetailFragment.setArguments(args);
addFragment(mChannelDetailFragment, true, ChannelDetailFragment.TAG);
}
Я следовать этому TUT по адресу: http://developer.android.com/training/basics/fragments/communicating.html#Deliver К сожалению, у меня есть бросок ошибки из OnAttach {}. Я много раз проверял свой код, но не обнаружил, где это неверно. Сб помогите мне!
10-02 14:07:40.156: E/AndroidRuntime(980): FATAL EXCEPTION: main
10-02 14:07:40.156: E/AndroidRuntime(980): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.channellistfragment/com.example.channellistfragment.MainActivity}: java.lang.ClassCastException: [email protected] must implement OnListItemSelectedListener
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.os.Looper.loop(Looper.java:137)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.ActivityThread.main(ActivityThread.java:4745)
10-02 14:07:40.156: E/AndroidRuntime(980): at java.lang.reflect.Method.invokeNative(Native Method)
10-02 14:07:40.156: E/AndroidRuntime(980): at java.lang.reflect.Method.invoke(Method.java:511)
10-02 14:07:40.156: E/AndroidRuntime(980): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-02 14:07:40.156: E/AndroidRuntime(980): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-02 14:07:40.156: E/AndroidRuntime(980): at dalvik.system.NativeStart.main(Native Method)
10-02 14:07:40.156: E/AndroidRuntime(980): Caused by: java.lang.ClassCastException: [email protected] must implement OnListItemSelectedListener
10-02 14:07:40.156: E/AndroidRuntime(980): at com.example.channellistfragment.ChannelList.onAttach(ChannelList.java:79)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:867)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.Activity.performStart(Activity.java:5018)
10-02 14:07:40.156: E/AndroidRuntime(980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
10-02 14:07:40.156: E/AndroidRuntime(980): ... 11 more
спасибо! Я понимаю, почему он не работает. – Tungken