Probleme NavigationDrawer <->RecyclerView <-> Toolbar

  • 7 Antworten
  • Neuester Beitrag
Diskutiere Probleme NavigationDrawer <->RecyclerView <-> Toolbar im Android App Entwicklung im Bereich Betriebssysteme & Apps.
DagobertDokate

DagobertDokate

Experte
Ich modernisiere gerade eine App.

Eigentlich beinhaltet dieses gerade nicht so viel :D
Mein Plan war es:
  • ListView im NavigationDrawer gegen ne RecyclerView zu tauschen
  • ActionBar gegen Toolbar tauschen (setSupportActionBar)
  • ActionBarActivity gegen AppCompactActivity auszutauschen

So leider läuft das bei weitem nicht so einfach und rund wie anfangs von mir gedacht =/

Ich habe folgendes main Layout:
Code:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- The main content view -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/my_awesome_toolbar"
            app:theme="@style/B.ActionBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize" />


        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <!-- The navigation drawer -->
    <fragment
        android:id="@+id/navigation_drawer"
        android:name=".NavigationDrawerFragment"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>
dazu gibt es hier die Main Activity:
Code:
public class MainActivity extends AppCompatActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {
...
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mStorageHelper = ((BundesratApplication) getApplication()).getStorageHelper();

        setContentView(R.layout.root_content);

        final Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        mNavigationDrawerFragment = (NavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);

        mNavigationDrawerFragment.setUp(
                R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);

        if (savedInstanceState == null) {
            showNews();
            getSupportActionBar().setTitle(mTitle);
        }
...
}
und folgendes NavigationDrawer Fragment:

Code:
public class NavigationDrawerFragment extends Fragment implements MyAdapter.IMyViewHolderClicks {

    private NavigationDrawerCallbacks mCallbacks;

    private ActionBarDrawerToggle mDrawerToggle;

    private DrawerLayout mDrawerLayout;
    private View mFragmentContainerView;

    private RecyclerView mRecyclerView;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mCallbacks = (NavigationDrawerCallbacks) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
        }
    }

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

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        final MyAdapter adapter = new MyAdapter(this);
        mRecyclerView.setAdapter(adapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    }

    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) {
        mFragmentContainerView = getActivity().findViewById(fragmentId);
        mDrawerLayout = drawerLayout;
//        mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);

//        mDrawerLayout.setDrawerListener(mDrawerToggle);
//        mDrawerLayout.post(new Runnable() {
//            @Override
//            public void run() {
//                mDrawerToggle.syncState();
//            }
//        });
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    public boolean closeDrawer() {
        if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
            mDrawerLayout.closeDrawers();
            return true;
        }
        return false;
    }

    @Override
    public void onClick(int position) {
        Log.v(TAG, "onClick()");
        if (mDrawerLayout != null) {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }
    }

    public interface NavigationDrawerCallbacks {
        void onNavigationDrawerItemSelected(int position);
    }
}
Wenn ich den ActionBarDrawerToggle weg lasse, funktioniert alles so weit wie es soll. Vor allem funktioniert die "HomeAsUp"-Funktion. :thumbsup::thumbsup::thumbsup::love::love::love:

Sobald ich den ActionBarDrawerToggle mit dazu nehme, wie im auskommentierten Bereich, fängt der sc****, fu***, ******** ******** ***** *****, äääääääääh ich meinte Käse richtig an zu nerven.
Dabei läuft folgendes schief:
  • HomeAsUp Icon öffnet bei click das Menü und spricht nicht meine onOptionsItemSelected()-Methode an
  • Bei getSupportActionBar().setDisplayHomeAsUpEnabled(show); verschwinden oben alle Icons
  • Ich kann durch den NavigationDrawer (füllt vertical komplett) den zurückpfeil klicken oO

Ich bin am verzweifeln :cursing: :cursing: :cursing: :cursing: :cursing: :cursing: :cursing: :cursing: :cursing: :cursing:

Hat sich jemand schon mal damit beschäftigt und kann mir tipps geben was ich so falsch mache?^^

lg. Dagobert
 
missspelled

missspelled

App-Anbieter (In-App)
Hallo,
bin mir fast sicher, dass es an den SupportLibs ("AppCompactActivity") liegt. Die zu mischen kommt nicht gut (und das ist schnell passiert - jedenfalls kommt mir dein Problem bekannt vor ;) )

Probiere mal die Sache auf
Code:
public class AwesomeActivity extends ActionBarActivity
zu beschränken. Vermutlich ist diese "Konfiguration" das was du suchst :)

Was sagt Logcat? Bin mir fast sicher, dass dort der Fehler zu finden ist...

Welche API Version hast du hinterlegt?
 
DagobertDokate

DagobertDokate

Experte
So ich nehme mich mal den Problem weiter an ;)
Genug anderes vorher gemacht^^
Die zu mischen kommt nicht gut (und das ist schnell passiert - jedenfalls kommt mir dein Problem bekannt vor )
Deswegen ja die AppCompatActivity. Die kommt genauso wie der Toggle aus der v7. Im Gegensatz dazu kommt die ActionBarActivity aus der v4 (und ist mittlerweile deprecated).

Welche API Version hast du hinterlegt?
Als API ist das min 15, compile und target 22

Der ursprüngliche Beitrag von 10:40 Uhr wurde um 11:05 Uhr ergänzt:

Okay ich hab jetzt mal nen neues Projekt mit nem nav Drawer erstellt und ohne was zu ändern ausgeführt. Auch hier lächelt mich kein Hamburger-Symbol mehr an sondern ein Zurück-Pfeil.
Geht es euch genau so?
Ist das so gewollt? oO
Gehört das mit zum Material Design?
:confused2::confused2::confused2::confused2:

lg.
 
missspelled

missspelled

App-Anbieter (In-App)
Jo, das mit dem Pfeil ist bei mir auch so.
Werde die nächsten Tage auch nochmal ein Projekt auf Material Design umstellen.
Erfahrungen mit dem ViewPager hast du nicht zufällig? Ich glaube mit dem werde ich noch ne Menge Spaß haben :-/
Werde den Thread updaten, sobald es von meiner Seite was neues gibt.
 
missspelled

missspelled

App-Anbieter (In-App)
Hallo, ich hab mal ein bisschen Code aus meinem Projekt herauskopiert, vielleicht hilft es dir ja schon weiter...

DagobertDokate schrieb:
  • HomeAsUp Icon öffnet bei click das Menü und spricht nicht meine onOptionsItemSelected()-Methode an

Code:
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            super.onBackPressed();
            return true;

    }

    return super.onOptionsItemSelected(item);
}
DagobertDokate schrieb:
  • Bei getSupportActionBar().setDisplayHomeAsUpEnabled(show); verschwinden oben alle Icons
Code:
private Toolbar toolbarSetup() {
    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar_lable_editor);
    Logic.themeToolbar(this, mToolbar, null);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    return mToolbar;
}
DagobertDokate schrieb:
  • Ich kann durch den NavigationDrawer (füllt vertical komplett) den zurückpfeil klicken oO
Das hatte ich auch schon, aber ich weiß leider nicht mehr wie ich das gefixt habe :-/ Vielleicht mal irgendwas in der xml als clickable setzen, oder die View-Hirachie mit im Manifest über den "meta-data"-Tag deklarieren (wobei das jetzt mehr geraten ist)..
Code:
<activity
    android:name=".activities.CardEditorActivity"
    android:label="@string/title_activity_add_card">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.pepperonas.teds.activities.ShowCardActivity">
    </meta-data>
</activity>
 
DagobertDokate

DagobertDokate

Experte
Mit welchen Support Lib Versionen arbeitest du?

lg.
 
missspelled

missspelled

App-Anbieter (In-App)
Code:
compile 'com.android.support:support-v4:22.2.0'
compile 'com.android.support:support-v13:22.2.0'
Aber v7 wird damit auch reingeladen... (die v7.ActionBarActivity problemlos mit importiert - deprecated ist sie bei mir aber auch)
 
Zuletzt bearbeitet:
DagobertDokate

DagobertDokate

Experte
So ich bin es mal wieder...
Dieses Thema macht mich imo echt fertig... war das früher einfach oO

Kannst du mir mal ein Beispiel fertig machen? oO Wenn ich mit Android Studio nen Nav-Drawer durch das Template erstellen lasse hat dieser schon das falsche Icon finde ich.


lg. Dagobert
 
Ähnliche Themen - Probleme NavigationDrawer <->RecyclerView <-> Toolbar Antworten Datum
8
2