Rozpocznij działanie od fragmentu

Mam 2 fragmenty z na obu fragmentach guzikiem. Po naciśnięciu przycisku chciałbym rozpocząć nową aktywność. Ale nie mogę go uruchomić.

Otrzymuję błąd: błąd tutaj: type mismatch: cannot convert from mFragmentFavorite to Fragment

Co robię źle?

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;
    }
}

favorite activity

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;
    }
}

Jeśli favoriteactivity rozszerza fragmenty, błąd zniknie, ale wtedy Dostaję błąd w findViewById(R.id.mainFavorite); i błąd to

Metoda findViewById (int) jest niezdefiniowana dla typu Favorite activity

EDIT:

Po naciśnięciu przycisku we fragmencie, aby rozpocząć aktywność, aplikacja ulega awarii to jest mój 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)
Author: cricket_007, 2013-03-18

5 answers

mFragmentFavorite w Twoim kodzie jest FragmentActivity, co nie jest tym samym co Fragment. Dlatego dostajesz niedopasowanie typu. Ponadto, nigdy nie należy dzwonić new na Activity, ponieważ nie jest to właściwy sposób, aby rozpocząć.

Jeśli chcesz uruchomić nową instancję mFragmentFavorite, możesz to zrobić za pomocą Intent.

Od a Fragment:

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

Od an Activity

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

Jeśli chcesz zacząć aFavorite zamiast mFragmentFavorite, musisz tylko zmienić ich nazwy w utworzonym Intent.

Również, zalecam zmianę nazw klas, aby były bardziej dokładne. Nazywanie czegoś mFragmentFavorite jest niewłaściwe, ponieważ w ogóle nie jest to Fragment. Również deklaracje klas w Javie zazwyczaj zaczynają się od dużej litery. Dobrze byłoby nazwać swoją klasę czymś w rodzaju FavoriteActivity, aby być bardziej dokładnym i zgodnym z konwencjami językowymi. Musisz również zmienić nazwę pliku na FavoriteActivity.java jeśli zdecydujesz się to zrobić, ponieważ Java wymaga nazw klas pasujących do pliku nazwisko.

UPDATE

Również, wygląda na to, że naprawdę chciałeś mFragmentFavorite Być Fragment zamiast FragmentActivity w oparciu o użycie onCreateView. Jeśli chcesz, aby mFragmentFavorite było Fragment, Zmień następującą linijkę kodu:

public class mFragmentFavorite extends FragmentActivity{

Niech zamiast tego będzie napisane:

public class mFragmentFavorite extends Fragment {
 193
Author: Michael Celey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-06 00:55:12

Należy użyć getActivity() do uruchamiania działań z fragmentów

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

Należy również nazywać klasy wielkimi literami: MFragmentActivity zamiast mFragmentActivity.

 20
Author: liarspocker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-18 13:50:23

Używam tego w moim fragmencie.

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;
}
 3
Author: Sara Zakizadeh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-07 08:31:31

Jeśli używasz getActivity () , musisz się upewnić, że aktywność wywołująca została już dodana . Jeśli aktywność nie została dodana w takim przypadku, możesz otrzymać null Po wywołaniu getActivity()

W takich przypadkach getContext() jest bezpieczny

Następnie kod do rozpoczęcia aktywności zostanie nieznacznie zmieniony, np.

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

aktywność, usługa i aplikacja rozszerza klasę ContextWrapper, dzięki czemu można używać to lub getContext () lub getApplicationContext () w miejsce pierwszego argumentu.

 3
Author: Jayakrishnan PM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 01:47:13

Być może będziesz musiał zastąpić getActivity () MainActivity.to dla tych, którzy mają z tym problemy.

 0
Author: ADL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-30 03:28:14