这是错误 来自“我的Logcat”:
这是完整的源代码:https://pastebin.com/MMMybRd0
由以下原因引起:java.lang.ClassCastException:MainScreenTeacher无法在FragmentHome.onAttach(FragmentHome.java:176)上强制转换为MainScreen。
FragmentHome.java
public class FragmentHome extends Fragment implements RecyclerViewAdapter.ItemListener {
private static AsyncHttpClient client = new AsyncHttpClient();
View itemView;
private LinearLayout busDirectory, absentDirectory;
private SharedPreferences pref = null;
RecyclerView recyclerView;
ArrayList arrayList;
MainScreen activity;
private List<SettingProfileItem> students;
private LoadingView load;
private FragmentHomeListener fragmentHomeListener;
private String schoolIdSelected;
private String studentlIdSelected;
private String fees_url = "";
public FragmentHome() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Util.setSelectedLang(getActivity());
}
public interface FragmentHomeListener {
void onSettingsHomeClicked();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
fragmentHomeListener = (FragmentHomeListener) getActivity();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = (MainScreen) context;
}
这是我的MainScreen.java:
public class MainScreen extends AppCompatActivity
implements RecyclerViewAdapterBottom.ItemListener, FragmentHome.FragmentHomeListener,
FragmentSettingProfile.SettingsFragmentListener {
String KEY_ADS_STR = "ads_str_json";
private static AsyncHttpClient client = new AsyncHttpClient();
// String strURLAdv = "http://ws.schoolzoneapp.com/vzons.asmx/getVzonsAdvertisementJsn";
String strURLUpdate = "http://ws.schoolzoneapp.com/vzons.asmx/updateAppUserLog";
String[] boomMenuItems;
int[] boomMenuDrawables;
BoomMenuButton bmb;
HashMap<String, Integer> HashMapForLocalRes ;
private String strAdsJson = null;
ModelAdv modelAdv;
private SliderLayout imageSlider;
LinearLayout tab_menu;
Button btnHome;
NavigationView navigationView;
public RecyclerView recyclerView;
private ArrayList arrayList;
public RecyclerViewAdapterBottom adapter;
HashMap<String, String> url_maps_desc;
public ImageView tool_imgBack, tool_imgShare, breaking_news;
private CircleImageView txt_float;
public TextView tool_txtTitle, txtPowered, tv_student_setting, toolShop, toolAdress;
public CircleImageView tv_student;
public RelativeLayout toolbar_layout;
private int xDelta;
private int yDelta;
private ViewGroup mainLayout;
public Menu mainMenu;
public boolean showPaymentView;
private SharedPreferences pref = null;
private ArrayList<SettingProfileItem> students;
private LoadingView load;
private IntentFilter filter = new IntentFilter();
private ConnectivityReciever connectReciever;
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (strAdsJson != null) outState.putString(KEY_ADS_STR, strAdsJson);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
strAdsJson = savedInstanceState.getString(KEY_ADS_STR);
}
AppLovinSdk.initializeSdk(this);
Fresco.initialize(this);
setContentView(R.layout.activity_main_screen);
initView();
这是我的MainScreenTeacher.java:
public class MainScreenTeacher extends AppCompatActivity
{
String KEY_ADS_STR = "ads_str_json";
private static AsyncHttpClient client = new AsyncHttpClient();
// String strURLAdv = "http://ws.schoolzoneapp.com/vzons.asmx/getVzonsAdvertisementJsn";
String strURLUpdate = "http://ws.schoolzoneapp.com/vzons.asmx/updateAppUserLog";
String[] boomMenuItems;
int[] boomMenuDrawables;
BoomMenuButton bmb;
HashMap<String, Integer> HashMapForLocalRes ;
private String strAdsJson = null;
ModelAdv modelAdv;
private SliderLayout imageSlider;
LinearLayout tab_menu;
Button btnHome;
NavigationView navigationView;
public RecyclerView recyclerView;
private ArrayList arrayList;
public RecyclerViewAdapterBottom adapter;
HashMap<String, String> url_maps_desc;
public ImageView tool_imgBack, tool_imgShare, breaking_news;
private CircleImageView txt_float;
public TextView tool_txtTitle, txtPowered, tv_student_setting, toolShop, toolAdress;
public CircleImageView tv_student;
public RelativeLayout toolbar_layout;
private int xDelta;
private int yDelta;
private ViewGroup mainLayout;
public Menu mainMenu;
public boolean showPaymentView;
private SharedPreferences pref = null;
private ArrayList<SettingProfileItem> students;
private LoadingView load;
private IntentFilter filter = new IntentFilter();
private ConnectivityReciever connectReciever;
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (strAdsJson != null) outState.putString(KEY_ADS_STR, strAdsJson);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
strAdsJson = savedInstanceState.getString(KEY_ADS_STR);
}
AppLovinSdk.initializeSdk(this);
Fresco.initialize(this);
setContentView(R.layout.activity_main_screen_teacher);
initView();
这是ActivityFragmentHomeSecond.java
public class ActivityFragmentHomeSecond extends Fragment implements RecyclerViewAdapter.ItemListener {
private static AsyncHttpClient client = new AsyncHttpClient();
View itemView;
private LinearLayout busDirectory, absentDirectory;
private SharedPreferences pref = null;
RecyclerView recyclerView;
ArrayList arrayList;
MainScreenTeacher activity;
private List<SettingProfileItem> students;
private LoadingView load;
private ActivityFragmentHomeSecondListener activityFragmentHomeSecondListener;
private String schoolIdSelected;
private String studentlIdSelected;
private String fees_url = "";
public ActivityFragmentHomeSecond() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Util.setSelectedLang(getActivity());
}
public interface ActivityFragmentHomeSecondListener {
void onSettingsHomeClicked();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
activityFragmentHomeSecondListener = (ActivityFragmentHomeSecondListener) getActivity();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = (MainScreenTeacher) context;
}
请帮助我修复错误,这将非常有帮助,谢谢。
答案 0 :(得分:1)
您打开 FragmentHome 的活动是 MainScreen (或者可能是两者)。在onAttach中,您将活动投射到** MainScreenTeacher **并使其崩溃尝试像这样检查if(activity instanceOf MainScreenTeacherActivity )->强制将其强制转换为 MainScreenTeacherActivity ,否则if(activity实例为 MainScreenActivity )-> cast转到 MainScreenActivity