[android] 조각에서 활동 시작

두 조각에 버튼이 두 개 있습니다. 버튼을 누르면 새로운 활동을 시작하고 싶습니다. 그러나 나는 그것을 작동시킬 수 없습니다.

내가 얻는 오류 : 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. 이것이 유형 불일치가 발생하는 이유입니다. 또한, 전화를해서는 안 newActivity그 일을 시작하는 적절한 방법이 아니다한다.

의 새 인스턴스를 시작 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로 변경해야합니다.

최신 정보

당신이 실제로 의미처럼 또한, 보이는 mFragmentFavoriteFragment대신 FragmentActivity의 사용에 따라 onCreateView. 당신이 mFragmentFavorite되고 싶다면 Fragment다음 코드 줄을 변경하십시오.

public class mFragmentFavorite extends FragmentActivity{

대신 이것을 읽으십시오.

public class mFragmentFavorite extends Fragment {


답변

getActivity()조각에서 활동을 시작 하는 데 사용해야 합니다.

Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);

또한 클래스 이름 MFragmentActivitymFragmentActivity. 대신 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>()