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)