두 조각에 버튼이 두 개 있습니다. 버튼을 누르면 새로운 활동을 시작하고 싶습니다. 그러나 나는 그것을 작동시킬 수 없습니다.
내가 얻는 오류 : ERROR here : Type mismatch : cannot convert from mFragmentFavorite to Fragment
내가 도대체 뭘 잘못하고있는 겁니까?
MyFragmentPagerAdapter
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
final int PAGE_COUNT = 3;
/** Constructor of the class */
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
switch(arg0){
case 0:
return new FavoriteActivity();
//ERROR: Type mismatch: cannot convert from FavoriteActivity to Fragment
case 1:
return new SettingsActivity();
default:
return null;
}
}
/** Returns the number of pages */
@Override
public int getCount() {
return PAGE_COUNT;
}
}
가장 좋아하는 활동
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class FavoriteActivity extends Activity{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main_favorite, container, false);
OnClickListener listnr=new OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent("aFavorite");
startActivity(i);
}
};
Button btn =(Button) v.findViewById(R.id.mainFavorite);
btn.setOnClickListener(listnr);
return v;
}
}
FavoriteActivity가 조각을 확장하면 오류가 사라지지만 findViewById(R.id.mainFavorite);
오류가 발생하고 오류가 발생합니다.
findViewById (int) 메소드는 FavoriteActivity 유형에 대해 정의되지 않았습니다.
편집하다:
조각의 버튼을 눌러 활동을 시작하면 앱이 충돌합니다. 이것이 내 logcat입니다.
03-18 16:01:23.985: E/AndroidRuntime(1985): FATAL EXCEPTION: main
03-18 16:01:23.985: E/AndroidRuntime(1985): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=FavoriteActivityList }
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1569)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1420)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Activity.startActivityForResult(Activity.java:3446)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Activity.startActivityForResult(Activity.java:3407)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:826)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.support.v4.app.Fragment.startActivity(Fragment.java:838)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.example.spui.FavoriteActivity$1.onClick(FavoriteActivity.java:24)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.view.View.performClick(View.java:4211)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.view.View$PerformClick.run(View.java:17267)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Handler.handleCallback(Handler.java:615)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Looper.loop(Looper.java:137)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.ActivityThread.main(ActivityThread.java:4898)
03-18 16:01:23.985: E/AndroidRuntime(1985): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:01:23.985: E/AndroidRuntime(1985): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-18 16:01:23.985: E/AndroidRuntime(1985): at dalvik.system.NativeStart.main(Native Method)
답변
mFragmentFavorite
귀하의 코드 FragmentActivity
에서는 Fragment
. 이것이 유형 불일치가 발생하는 이유입니다. 또한, 전화를해서는 안 new
온 Activity
그 일을 시작하는 적절한 방법이 아니다한다.
의 새 인스턴스를 시작 mFragmentFavorite
하려면 Intent
.
에서 Fragment
:
Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);
에서 Activity
Intent intent = new Intent(this, mFragmentFavorite.class);
startActivity(intent);
aFavorite
대신 시작 mFragmentFavorite
하려면 생성 된 Intent
.
또한 클래스 이름을 더 정확하게 변경하는 것이 좋습니다. 무언가를 부르는 것은 mFragmentFavorite
그것이 전혀 아니라는 점에서 부적절 Fragment
합니다. 또한 Java의 클래스 선언은 일반적으로 대문자로 시작합니다. 클래스 이름 FavoriteActivity
을 좀 더 정확하고 언어 규칙을 준수하는 것과 같은 이름으로 지정 하는 것이 좋습니다. Java는 클래스 이름이 파일 이름과 일치해야하므로이를 선택하면 파일 이름을 FavoriteActivity.java로 변경해야합니다.
최신 정보
당신이 실제로 의미처럼 또한, 보이는 mFragmentFavorite
로 Fragment
대신 FragmentActivity
의 사용에 따라 onCreateView
. 당신이 mFragmentFavorite
되고 싶다면 Fragment
다음 코드 줄을 변경하십시오.
public class mFragmentFavorite extends FragmentActivity{
대신 이것을 읽으십시오.
public class mFragmentFavorite extends Fragment {
답변
getActivity()
조각에서 활동을 시작 하는 데 사용해야 합니다.
Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);
또한 클래스 이름 MFragmentActivity
을 mFragmentActivity
. 대신 caps :로 지정해야합니다 .
답변
getActivity () 를 사용 하는 경우 호출 활동이 이미 추가 되었는지 확인해야합니다 . 이러한 경우 활동이 추가되지 않았으므로 getActivity () 를 호출 할 때 null이 될 수 있습니다.
이러한 경우 getContext () 는 안전합니다.
활동을 시작하는 코드는 다음과 같이 약간 변경됩니다.
Intent intent = new Intent(getContext(), mFragmentFavorite.class);
startActivity(intent);
Activity, Service 및 Application은 ContextWrapper 클래스를 확장하므로 첫 번째 인수 대신 this 또는 getContext () 또는 getApplicationContext () 를 사용할 수 있습니다 .
답변
나는 이것을 내 조각에서 사용합니다.
Button btn1 = (Button) thisLayout
.findViewById(R.id.btnDb1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getActivity(), otherActivity.class);
((MainActivity) getActivity()).startActivity(intent);
}
});
return thisLayout;
}
답변
조각에서 새 활동 시작 :
Intent intent = new Intent(getActivity(), TargetActivity.class);
startActivity(intent);
활동에서 새 활동 시작 :
Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent);
답변
이 문제가있는 경우 getActivity ()를 MainActivity.this로 바꿔야 할 수 있습니다.
답변
Kotlin으로이 코드를 실행합니다.
requireContext().startActivity<YourTargetActivity>()