Android 无法在3个片段和它之间通信';s导致日志cat中出现classcastexception错误

Android 无法在3个片段和它之间通信';s导致日志cat中出现classcastexception错误,android,android-fragments,Android,Android Fragments,这是我的主要活动: package com.davemcelf.fiction; import com.astuetz.PagerSlidingTabStrip; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.FragmentTransaction; import android.os.Bu

这是我的主要活动:

package com.davemcelf.fiction;

import com.astuetz.PagerSlidingTabStrip;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity implements TabListener, communicator,     sendtocontext {
ActionBar actionbar;
ViewPager viewPager;
Pager pager;
public int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   pager=new Pager(getSupportFragmentManager());
    viewPager=(ViewPager)findViewById(R.id.pager);
    viewPager.setAdapter(pager);
    PagerSlidingTabStrip tabs=(PagerSlidingTabStrip)findViewById(R.id.tabs);
    tabs.setViewPager(viewPager);

}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
    // TODO Auto-generated method stub

}
@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
    // TODO Auto-generated method stub

}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
    // TODO Auto-generated method stub

}
@Override
public void sendcontext(int pos1) {
    Log.e("the pager position is", ""+position);
    Log.e("the story position is", ""+pos1);
    FragmentManager fm= getSupportFragmentManager();
    ReadFragment f2=(ReadFragment)fm.findFragmentById(R.id.pager);
    f2.setStory(position, pos1);
    viewPager.setCurrentItem(2);
}

@Override
public void send(int pos) {
    Log.e("You got here",""+pos);
    FragmentManager fm=getSupportFragmentManager();
    StoryFragment f2=(StoryFragment)fm.findFragmentById(R.id.pager);
    if(f2!=null){
        position=pos;
        f2.getPos(pos);
        viewPager.setCurrentItem(1);
    }
}
}

这是我的第一个片段

package com.davemcelf.fiction;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * A simple {@link Fragment} subclass.
 * 
 */
public class CategoryFragment extends Fragment implements OnItemClickListener {
communicator comm;
public CategoryFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView=inflater.inflate(R.layout.fragment_category, container, false);
    // Inflate the layout for this fragment
    return rootView;

}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);

    final String[] cate={"Romance","Joke","Horror","Poem"};
    comm=(communicator)getActivity();
    ListView cat=(ListView)getActivity().findViewById(R.id.category);
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(), R.layout.text_list_view, cate);
    cat.setAdapter(adapter);
    cat.setOnItemClickListener(this);

}

@Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
    // TODO Auto-generated method stub
    Log.e("hahaha",""+pos);
    comm.send(pos);
}
  @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 {
            comm =(communicator) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }

}
日志:

09-17 22:11:58.524: E/AndroidRuntime(25936): FATAL EXCEPTION: main
09-17 22:11:58.524: E/AndroidRuntime(25936): java.lang.ClassCastException:      com.davemcelf.fiction.CategoryFragment cannot be cast to com.davemcelf.fiction.ReadFragment
09-17 22:11:58.524: E/AndroidRuntime(25936):    at com.davemcelf.fiction.MainActivity.sendcontext(MainActivity.java:51)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at com.davemcelf.fiction.StoryFragment.onItemClick(StoryFragment.java:64)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at    android.widget.AdapterView.performItemClick(AdapterView.java:301)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at     android.widget.AbsListView.performItemClick(AbsListView.java:1490)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3275)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.widget.AbsListView$1.run(AbsListView.java:4518)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.os.Handler.handleCallback(Handler.java:725)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.os.Looper.loop(Looper.java:137)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at  android.app.ActivityThread.main(ActivityThread.java:5283)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at java.lang.reflect.Method.invokeNative(Native  Method)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at  java.lang.reflect.Method.invoke(Method.java:511)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at       com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at dalvik.system.NativeStart.main(Native Method)

当我从第三个片段移动到其他2个片段时,我得到了错误。有什么问题吗?

请说明您试图用代码实现的目标。它将帮助人们查看代码的特定部分,并更快地给出答案;这是您的错误,每个片段必须具有唯一的id,通过该id,您可以在片段管理器中找到此片段。但您对每个片段使用相同的id。因此,您每次都可以从片段管理器获得相同的片段。@VyprNoch我希望用户从片段1和片段2中选择类别和故事。。然后,在第三个片段中展示这个故事。@Govtart,但我在xml中使用viewPager。。。。那么,我是否必须将这三个片段添加到MainActivity.xml中呢?只需遵循官方的指导:您不清楚片段机制是如何工作的。。。
package com.davemcelf.fiction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
* A simple {@link Fragment} subclass.
* 
*/
public class ReadFragment extends Fragment {
TextView story;
public ReadFragment() {
    // Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Log.e("read ","Create ");

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView=inflater.inflate(R.layout.fragment_read1, container, false);
    return rootView;
}
public void setStory(int pos,int pos1){
    story=(TextView)getActivity().findViewById(R.id.context1);
    Log.e("Story here", ""+pos +","+pos1);
    switch(pos){
    case 0:
        switch (pos1) {
        case 0:
            story.setText(R.string.The_Stranger);
            break;
        case 1:
            story.setText(R.string.Just_My_Sight_Into);
            break;
        default:
            story.setText(R.string.Love_Story);
            break;
        }
        break;
    case 2:
        switch (pos1) {
        case 0:
            story.setText(R.string.The_Haunted);
            break;

        default:
            story.setText(R.string.Skinless);
            break;
        }
        break;
    default:
        break;
    }
}
}
09-17 22:11:58.524: E/AndroidRuntime(25936): FATAL EXCEPTION: main
09-17 22:11:58.524: E/AndroidRuntime(25936): java.lang.ClassCastException:      com.davemcelf.fiction.CategoryFragment cannot be cast to com.davemcelf.fiction.ReadFragment
09-17 22:11:58.524: E/AndroidRuntime(25936):    at com.davemcelf.fiction.MainActivity.sendcontext(MainActivity.java:51)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at com.davemcelf.fiction.StoryFragment.onItemClick(StoryFragment.java:64)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at    android.widget.AdapterView.performItemClick(AdapterView.java:301)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at     android.widget.AbsListView.performItemClick(AbsListView.java:1490)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3275)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.widget.AbsListView$1.run(AbsListView.java:4518)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.os.Handler.handleCallback(Handler.java:725)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at android.os.Looper.loop(Looper.java:137)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at  android.app.ActivityThread.main(ActivityThread.java:5283)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at java.lang.reflect.Method.invokeNative(Native  Method)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at  java.lang.reflect.Method.invoke(Method.java:511)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at       com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
09-17 22:11:58.524: E/AndroidRuntime(25936):    at dalvik.system.NativeStart.main(Native Method)