2013-04-30 62 views
0

我mainactivity.java看起來是這樣的:錯誤意圖的Android現在Eclipse

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class FirstTabFragment extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    final View v = inflater.inflate(R.layout.main, null); 
    final View button = v.findViewById(R.id.button2); 
    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onlogin(v); 
     } 
    }); 
    return v; 
} 

public void onlogin(View button) { 
    final Context context = getActivity().getApplicationContext(); 
    final Intent intent = new Intent(context, user.class); 
    context.startActivity(intent); 
} 


    } 

,當我點擊按鈕我的應用程序仍然是破碎:S

的logcat:

04- 30 20:18:50.520:E/AndroidRuntime(17203):致命例外:main 04-30 20:18:50.520:E/AndroidRuntime(17203):android.util.AndroidRuntimeException:從Activity外部調用startActivity上下文需要FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎? 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.app.ContextImpl.startActivity(ContextImpl.java:1095) 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.content.ContextWrapper.startActivity(ContextWrapper.java:276) 04-30 20:18:50.520:E/AndroidRuntime(17203):at com.example.bloodneeded.FirstTabFragment.onlogin(FirstTabFragment.java:37) 04 -30 20:18:50.520:E/AndroidRuntime(17203):at com.example.bloodneeded.FirstTabFragment $ 1.onClick(FirstTabFragment.java:28) 04-30 20:18:50.520:E/AndroidRuntime(17203)在android.view.View.performClick(View.java:3549) 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.view.View $ PerformClick.run(View.java:14400) 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.os.Handler.handleCallback(Handler.java:605) 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.os.Handler.dispatchMessage(Handler.java:92) 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.os.Looper.loop(Looper.java:154) 04-30 20:18:50.520:E/AndroidRuntime(17203):at android.app.ActivityThread.main(ActivityThread.java:4944) 04-30 20:18:50.520:E/AndroidRuntime(17203):在java.lang.reflect.Method.invokeNative(本地方法) 04-30 20:18:50.520:E/AndroidRuntime(17203):at java.lang.reflect .Method.invoke(Method.java:511) 04-30 20:18:50.520:E/AndroidRuntime(17203):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 04-30 20:18:50.520:E/AndroidRuntime(17203):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-30 20:18:50.520:E/AndroidRuntime(17203):在dalvik.system.NativeStart.main(本機方法)

回答

1

我認爲你不明白「這」的真正含義。 setClass需要兩個參數 - 上下文和類。如果你在一個Activity中這樣做,你指定「this」是因爲Activity擴展了Context(另一個詞,Activity是一個Context)。片段不是一個上下文,所以你會得到這個錯誤。上下文也可以以不同的方式獲得。 startActivity方法也是一個Context方法。 而且,如果有意圖,它從構造函數中設置ComponentName的代碼就會更少。

public void onlogin(View button) { 
    final Context context = getActvity(); 
    final Intent intent = new Intent(context, user.class); 
    context.startActivity(intent); 
} 

請勿使用小寫字母命名類。類名應以大寫字母開頭。這不是一個錯誤,而是一個慣例。

約在getView方法

return (RelativeLayout) inflater.inflate(R.layout.main, container,false); 

其實完全沒有必要投這一個RelativeLayout的。只返回

return inflater.inflate(R.layout.main, container,false); 

關於

if (container == null) { 
    return null; 
} 

不知道這意味着什麼,但大多是

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.main, null); 
} 

必須經過精細

而且它崩潰,因爲

public void onlogin(View button) { 
    final Context context = getActvity(); 
    final Intent intent = new Intent(context, user.class); 
    context.startActivity(intent); 
} 

必須在此視圖所附的上下文中定義。

這意味着爲了工作,它必須在Activity中定義,而不是在Fragment中定義。 你解決這個 1)把這個方法在你的活動兩種方式

2)如果你想在片段來定義它,你應該刪除

android:onclick 

從XML,設置按鈕ID

android:id="@+id/yourButtonId" 

並直接在按鈕上設置onClickListener。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    final View v = inflater.inflate(R.layout.main, null); 
    final View button = v.findViewById(R.id.yourButtonId); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onlogin(v); 
     } 
    }); 
    return v; 
} 
+0

你可以檢查我的編輯問題以查看logcat錯誤嗎? cz我喜歡你說的,但是當我點擊按鈕時,應用程序崩潰了 – Charbel 2013-04-30 16:53:33

+0

更新瞭解決方案的答案。 – 2013-04-30 16:57:25

+0

plz檢查新編輯的問題,導致我的應用程序仍在壓碎人 – Charbel 2013-04-30 17:04:15

2

正如你在該片段中,你應該代替getActivity()this 試試這個

intent.setClass(getActivity(), user.class); 

編輯: 還包括本

getActivity().startActivity(intent); 
+0

不是完整的答案。 context.startActivity(intent)也需要提及。 – 2013-04-30 16:42:56

+0

男人的錯誤消失,但當我點擊按鈕應用程序崩潰..你可以檢查我編輯的問題,以查看什麼是logcat? :s – Charbel 2013-04-30 16:43:38

+0

@DoctororDrive謝謝,我忘了包括.. – Pragnani 2013-04-30 16:44:04

0

嘗試 intent.setClass(FirstTabFragment.this,user.class);