2016-06-12 10 views
0

Mein Problem ist: Nach dem Start der App mit nur einer Aktivität, zeigt die Aktionsleiste korrekt den Titel der Anwendung "ParseC" (während der Inhaltsbereich noch leer ist), aber Nach dem Laden einer RSS und dem Füllen einer benutzerdefinierten Listenansicht wird der Titel nicht mehr angezeigt. Dies wurde mit API 16 und 23 mit demselben Effekt getestet.Android Action Bar Titel verschwindet nach dem Auffüllen von benutzerdefinierten ListView

onCreate() analysiert einen RSS-Feed; Wenn dies erledigt ist, füllt onPostExecute die Listenansicht mit den Einträgen auf, und in diesem Moment verschwindet der Titel der App-Leiste. Wenn ich getSupportActionBar(). GetTitle(). ToString() ausführen, bekomme ich die richtige Antwort (ParseC).

Das ist mein MainActivity.java (onCreate):

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    context = this; 

    new DownloadXmlTask().execute(URL); 
} 

und (OnPostExecute):

@Override 
protected void onPostExecute(String result) { 
    setContentView(R.layout.activity_main); 

    //Adapter code 
    ListView yourListView = (ListView) findViewById(R.id.listView); 
    // get data from the table by the ListAdapter 
    ListAdapter customAdapter = new ListAdapter(context, R.layout.itemlistrow, theEntries); 
    yourListView .setAdapter(customAdapter); 
} 

Was ich erwartet hatte war der Titel dort zu bleiben, da ich es nicht täte Verlasse die Aktivität (ich vermute, dass der Fehler in den Layouts passiert).

Wie bei den Layouts enthält das Hauptaktivitätslayout (activity_main.xml) die Datei content_main.xml mit der Listenansicht, die das benutzerdefinierte Layout itemlistrow.xml verwendet.

Meine Frage ist: Was könnte dazu führen, dass die Bezeichnung der App-Leiste ausgeblendet wird?

AndroidManifest.xml unten:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="co.samoliver.parsec"> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="co.samoliver.parsec.MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     android:theme="@style/ThemeOverlay.AppCompat.ActionBar" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

<include layout="@layout/content_main" /> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="@dimen/fab_margin" 
    android:src="@android:drawable/ic_dialog_info" /> 

Layouts: content_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="co.samoliver.parsec.MainActivity" 
tools:showIn="@layout/activity_main"> 

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/listView" /> 

itemlistrow.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="wrap_content" android:orientation="vertical" 
android:layout_width="fill_parent"> 

<TextView android:textColor="#000000" 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Title" android:textStyle="bold" 
    android:gravity="center_vertical" 
    android:layout_weight="1" 
    android:typeface="normal" 
    android:height="40sp" 
    android:textSize="16dp" /> 


<TextView android:textColor="#000000" 
    android:id="@+id/summary" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Summary" 
    android:layout_weight="1" 
    android:height="20sp" 
    android:typeface="normal" /> 

<TextView android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:layout_weight="1" 
android:textColor="#000000" 
android:gravity="right" 
android:id="@+id/id" 
android:text="Id" 
android:height="0sp" 
android:typeface="normal" /> 

+0

Wenn Sie vermuten, dass der Fehler in den Layouts auftreten könnte, dann veröffentlichen Sie bitte die Layouts –

Antwort

1

Der Fehler in Ihrem Manifest android:theme="@style/AppTheme.NoActionBar" sein könnte. Außerdem müssen Sie setContentView() nicht zweimal anrufen (dies kann auch zu Ihrem Problem beitragen). Einmal in der onCreate() sollte tun. Es wird die Leistung Ihrer App erhöhen, wenn Sie es nicht zweimal aufrufen und stattdessen notifyDataSetChanged() auf Ihrem Adapter aufrufen, wenn die Daten empfangen werden. Ich würde empfehlen, Ihren Adapter in der onCreate() selbst einzustellen und wenn die Daten empfangen werden, aktualisieren Sie es einfach.

+0

Vielen Dank. Mein spezielles Problem war, dass setContentView() das zweite Mal aufgerufen wurde (ich würde gerne verstehen, warum). Ich habe den Adapter auf postexecute gehalten, weil ich früher eine Nullzeiger-Ausnahme bekommen habe. –

+0

'setContentView()' übernimmt explizit die View-Hierarchie und ersetzt sie durch die angegebene View. Daher werden alle Arbeiten, die Sie mit der Aktionsleiste ausgeführt haben, verloren gehen. Erstellen Sie für den Nullzeiger den Adapter in 'onCreate()' und machen Sie vielleicht eine Instanzvariable?Dies wäre wahrscheinlich effizienter und für die Aktivität zugänglich, wenn sie benötigt wird. Der Nullzeiger könnte auch mit 'setContentView() 'zweimal verbunden werden. –