所以我有此代码,并且出现在logcat中的错误。由于某种原因,它显示用于我的自定义片段的强制转换im出现错误。
我在询问之前进行了搜索,并尝试了所有方法:
导入v4.support.fragment
检查清单,看看那里是否没有声明
在我的主要班级中扩展Fragmentactivity
我仍然有,请问有什么想法吗?
片段代码:
import java.util.Random;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class TapFragment extends Fragment {
private Button[] _Btns_SinUso;
private Button[] _Btns_AUsar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.fragment_buttons, container,
false);
setLayout(RootView);
return RootView;
}
public void setLayout(View v) {
int Dif = GameManager.readPreferences(getActivity(),
GameManager.KEY_DIF);
switch (Dif) {
case GameManager.GAMEDIF_MED:
_Btns_AUsar = new Button[GameManager.SIZE_5X5.length];
_Btns_SinUso = new Button[GameManager.T5X5_UNUSED.length];
for (int i = 0; i < _Btns_AUsar.length; i++)
_Btns_AUsar[i] = (Button) v
.findViewById(GameManager.SIZE_5X5[i]);
for (int i = 0; i < _Btns_SinUso.length; i++) {
_Btns_SinUso[i] = (Button) v
.findViewById(GameManager.T5X5_UNUSED[i]);
_Btns_SinUso[i].setVisibility(View.GONE);
}
break;
}
}
主要活动代码:
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class Game extends FragmentActivity {
private Activity _Actividad;
private boolean _StartGame;
private Button _Btn_Indicator;
private int _GM, _Dif, _Multi, _GT, _TimeReady, _Sc, _PPH, _ValorCorrecto,
_Combo;
TapFragment _FragButtons;
private TextView _TxtVw_Score, _TxtVw_Timer;
private Timer _C = new Timer();
private String _IniciarTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
_FragButtons = (TapFragment) getSupportFragmentManager().findFragmentById(R.id.Fr_ButtonContainer);
// _FragButtons.setColors();
// setGame();
declare();
// Shader textShader=new LinearGradient(0, 0, 0, 20,
// new int[]{Color.GREEN,Color.BLUE},
// new float[]{0, 1}, TileMode.CLAMP);
// _BtnTap=(Button) findViewById(R.id.Btn_Tap1);
// _BtnTap.getPaint().setShader(textShader);
}
public void declare() {
// DECLARACION
_Sc = 0;
_TimeReady = 4;
_StartGame = false;
_Actividad = Game.this;
_Dif = GameManager.readPreferences(_Actividad, GameManager.KEY_DIF);
_PPH = GameManager.readPreferences(_Actividad, GameManager.KEY_PPH);
_Multi = GameManager.readPreferences(_Actividad, GameManager.KEY_MULTI);
_GM = GameManager.readPreferences(_Actividad, GameManager.KEY_MODE);
_TxtVw_Score = (TextView) findViewById(R.id.TxtVw_Score);
_TxtVw_Timer = (TextView) findViewById(R.id.TxtVw_Timer);
_Btn_Indicator = (Button) findViewById(R.id.Btn_Indicator);
_IniciarTxt = getResources().getString(R.string.WordGo);
switch (_GM) {
case GameManager.GAMETYPE_1MIN:
_GT = 61;
break;
case GameManager.GAMETYPE_100T:
_GT = -1;
break;
}
}
主文件的XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/ReLa_Main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.albertoha94.games.Tap.Game"
tools:ignore="MergeRootFrame" >
<TextView
android:id="@+id/TxtVw_Timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="0"
android:textAppearance="?android:attr/textAppearanceLarge"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/TxtVw_Score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/TxtVw_Timer"
android:text="@string/WordScore"
android:textAppearance="?android:attr/textAppearanceLarge" />
<fragment
android:id="@+id/Fr_ButtonContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/adGame"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/TxtVw_Score"
class="com.albertoha94.games.Tap.TapFragment" />
</RelativeLayout>
LOGCAT:
12-11 00:04:23.865: E/AndroidRuntime(12884): FATAL EXCEPTION: main
12-11 00:04:23.865: E/AndroidRuntime(12884): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.albertoha94.games.Tap/com.albertoha94.games.Tap.Game}: java.lang.ClassCastException: com.albertoha94.games.Tap.TapFragment
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1735)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1754)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.ActivityThread.access$1500(ActivityThread.java:156)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1000)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.os.Handler.dispatchMessage(Handler.java:130)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.os.Looper.loop(SourceFile:351)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.ActivityThread.main(ActivityThread.java:3821)
12-11 00:04:23.865: E/AndroidRuntime(12884): at java.lang.reflect.Method.invokeNative(Native Method)
12-11 00:04:23.865: E/AndroidRuntime(12884): at java.lang.reflect.Method.invoke(Method.java:538)
12-11 00:04:23.865: E/AndroidRuntime(12884): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:969)
12-11 00:04:23.865: E/AndroidRuntime(12884): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:727)
12-11 00:04:23.865: E/AndroidRuntime(12884): at dalvik.system.NativeStart.main(Native Method)
12-11 00:04:23.865: E/AndroidRuntime(12884): Caused by: java.lang.ClassCastException: com.albertoha94.games.Tap.TapFragment
12-11 00:04:23.865: E/AndroidRuntime(12884): at com.albertoha94.games.Tap.Game.onCreate(Game.java:48)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
12-11 00:04:23.865: E/AndroidRuntime(12884): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1699)
12-11 00:04:23.865: E/AndroidRuntime(12884): ... 11 more
According to the logcat, my error happens in the onCreate() Method, when im casting my fragment.
编辑 - - - - - - - - - - -
我尝试了使用Kristy所说的解决方案的解决方案,并且出现了一个新错误,关于无法膨胀:
12-11 22:33:04.108: E/AndroidRuntime(16353): FATAL EXCEPTION: main
12-11 22:33:04.108: E/AndroidRuntime(16353): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.albertoha94.games.Tap/com.albertoha94.games.Tap.Game}: android.view.InflateException: Binary XML file line #68: Error inflating class com.albertoha94.games.Tap.TapFragment
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1735)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1754)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.ActivityThread.access$1500(ActivityThread.java:156)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1000)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.os.Handler.dispatchMessage(Handler.java:130)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.os.Looper.loop(SourceFile:351)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.ActivityThread.main(ActivityThread.java:3821)
12-11 22:33:04.108: E/AndroidRuntime(16353): at java.lang.reflect.Method.invokeNative(Native Method)
12-11 22:33:04.108: E/AndroidRuntime(16353): at java.lang.reflect.Method.invoke(Method.java:538)
12-11 22:33:04.108: E/AndroidRuntime(16353): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:969)
12-11 22:33:04.108: E/AndroidRuntime(16353): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:727)
12-11 22:33:04.108: E/AndroidRuntime(16353): at dalvik.system.NativeStart.main(Native Method)
12-11 22:33:04.108: E/AndroidRuntime(16353): Caused by: android.view.InflateException: Binary XML file line #68: Error inflating class com.albertoha94.games.Tap.TapFragment
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.createView(LayoutInflater.java:539)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:601)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.rInflate(LayoutInflater.java:654)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.inflate(LayoutInflater.java:439)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.inflate(LayoutInflater.java:351)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.inflate(LayoutInflater.java:307)
12-11 22:33:04.108: E/AndroidRuntime(16353): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:250)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.Activity.setContentView(Activity.java:1693)
12-11 22:33:04.108: E/AndroidRuntime(16353): at com.albertoha94.games.Tap.Game.onCreate(Game.java:48)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1699)
12-11 22:33:04.108: E/AndroidRuntime(16353): ... 11 more
12-11 22:33:04.108: E/AndroidRuntime(16353): Caused by: java.lang.NoSuchMethodException: TapFragment(Context,AttributeSet)
12-11 22:33:04.108: E/AndroidRuntime(16353): at java.lang.Class.getMatchingConstructor(Class.java:674)
12-11 22:33:04.108: E/AndroidRuntime(16353): at java.lang.Class.getConstructor(Class.java:503)
12-11 22:33:04.108: E/AndroidRuntime(16353): at android.view.LayoutInflater.createView(LayoutInflater.java:511)
12-11 22:33:04.108: E/AndroidRuntime(16353): ... 21 more
好吧,我是个白痴。原来您的两种方法都是正确的。我最初将TapFragment和Game类放在一起(TapFragment在Game里面),当我决定用不同的.java文件分隔类时,我从TapFragment中剪切了代码并将其粘贴到一个新文件中,但我完全忘了擦除该类那是在Game类内部的,剩下一个空的类。
public TapFragment extends Fragment{}
由于这一行代码仍然存在,因此我认为程序选择了该行而不是我想要的行,因此我擦除了这一行,代码就起作用了。谢谢n_n
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句