android-fragments example - obj Fragment falsch 2.Argument Typ gefunden 'Android.support.V4.app.Fragment.' benötigt 'Android.app.Fragment'




beispiel tutorial (5)

Unten ist ein Beispiel, das beim Scannen des Netzes von jemandem gefunden wurde, und das hat für mich funktioniert, hoffe, es wird dir helfen.

Menu_Fragment erbt nicht von android.support.v4.app.Fragment. Vermutlich erbt es von android.app.Fragment.

Es gibt zwei Fragment-Implementierungen: die native (z. B. android.app.Fragment) und die Backport (z. B. android.support.v4.app.Fragment). Sie müssen konsistent sein. Ihre Aktivität ist eine FragmentActivity, die Teil des Backports ist. Sie müssen also Ihre Fragmente von android.support.v4.app.Fragment erben.

Ich kann nicht herausfinden, warum mein objFragment Probleme mit dem Support-Manager hat. Ich erhalte diesen Fehler:

 Error:(101, 17) error: no suitable method found for replace(int,android.support.v4.app.Fragment)
method FragmentTransaction.replace(int,android.app.Fragment,String) is not applicable
(actual and formal argument lists differ in length)
method FragmentTransaction.replace(int,android.app.Fragment) is not applicable
(actual argument android.support.v4.app.Fragment cannot be converted to android.app.Fragment by method invocation conversion)

Und es passiert dabei auf objFragment in dieser Zeile: .replace(R.id.container, objFragment)

Hier ist mein vollständiger Code:

import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.app.Fragment;



/* public class MainActivity extends FragmentActivity {

   public static FragmentManager fragmentManager;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       // initialising the object of the FragmentManager. Here I'm passing getSupportFragmentManager(). You can pass getFragmentManager() if you are coding for Android 3.0 or above.
       fragmentManager = getSupportFragmentManager();
   }
} */


public class MainActivity2Activity extends FragmentActivity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    /**
     * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
     */
    private NavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;

    public static android.support.v4.app.FragmentManager fragmentManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);




        // initialising the object of the FragmentManager. Here I'm passing getSupportFragmentManager(). You can pass getFragmentManager() if you are coding for Android 3.0 or above.
        fragmentManager = getSupportFragmentManager();


        mNavigationDrawerFragment = (NavigationDrawerFragment)
                getFragmentManager().findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

        // Set up the drawer.
        mNavigationDrawerFragment.setUp(
                R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout));

        // initialising the object of the FragmentManager. Here I'm passing getSupportFragmentManager(). You can pass getFragmentManager() if you are coding for Android 3.0 or above.
        fragmentManager = getSupportFragmentManager();


    }

    @Override
    public void onNavigationDrawerItemSelected(int position) {

        // This method controls the navigation drawer

        Fragment objFragment = null;

        switch (position) {
            case 0:
                objFragment = new menu_1_fragment();
                break;
            case 1:
                objFragment = new menu_2_fragment();
                break;
            case 2:
                objFragment = new menu_3_fragment();
                break;
            case 3:
                objFragment = new menu_4_fragment();
                break;
            case 4:
                objFragment = new menu_5_fragment();
                break;
        }

        // update the main content by replacing fragments
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, objFragment)
                .commit();
    }

    public void onSectionAttached(int number) {
        switch (number) {
            case 1:
                mTitle = getString(R.string.title_section1);
                break;
            case 2:
                mTitle = getString(R.string.title_section2);
                break;
            case 3:
                mTitle = getString(R.string.title_section3);
                break;
            case 4:
                mTitle = getString(R.string.title_section4);
                break;
            case 5:
                mTitle = getString(R.string.title_section5);
                break;
        }
    }

    public void restoreActionBar() {
        ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayShowTitleEnabled(true);
        // actionBar.setTitle(mTitle);
    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (!mNavigationDrawerFragment.isDrawerOpen()) {
            // Only show items in the action bar relevant to this screen
            // if the drawer is not showing. Otherwise, let the drawer
            // decide what to show in the action bar.
            getMenuInflater().inflate(R.menu.main_activity2, menu);
            restoreActionBar();
            return true;
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        // Link to settings in the main menu or create google maps options
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main_activity2, container, false);
            return rootView;
        }


        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((MainActivity2Activity) activity).onSectionAttached(
                    getArguments().getInt(ARG_SECTION_NUMBER));
        }
    }

}

Das Problem besteht darin, dass die Fragmenttypen zwischen objFragment und fragmentManager objFragment . Der erste stammt vom Paket android.support.v4.app während der zweite vom Paket android.support.v4.app android.app .

Sehen Sie diese Antwort here , um den Unterschied zwischen den beiden Arten von Fragmenten zu kennen.

Um das Problem zu beheben , müssen Sie nun mit Ihren Importen fertig werden.

Verwenden import android.app.Fragment entweder import android.app.Fragment anstatt import android.app.Fragment zu import android.support.v4.app.Fragment

Oder tun Sie, wie Modge vorgeschlagen hat; Aktualisieren Sie den Hauptinhalt Ihrer App mit einem Fragmentmanager wie FragmentManager fragmentManager = getSupportFragmentManager() : FragmentManager fragmentManager = getSupportFragmentManager() . Aber dann musst du auch den Typ des FragmentManagers selbst ändern; import android.app.FragmentManager , import android.support.v4.app.FragmentManager; zu import android.support.v4.app.FragmentManager;


Ändern getFragmentManager() einfach getFragmentManager() zu getSupportFragmentManager()


Sie haben versucht, den nicht unterstützten FragmentManager für Ihre Transaktion zu verwenden. Ändere es um den Support zu bekommen.

    // update the main content by replacing fragments
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, objFragment)
            .commit();

Zu viel Code für diese Aufgabe, überprüfen Sie diese Bibliothek https://github.com/kodart/Httpzoid Verwendet GSON intern und bietet API, die mit Objekten funktioniert. Alle JSON-Details sind ausgeblendet.

Http http = HttpFactory.create(context);
http.get("http://example.com/users")
    .handler(new ResponseHandler<User[]>() {
        @Override
        public void success(User[] users, HttpResponse response) {
        }
    }).execute();




android android-fragments