2015-01-26 61 views
8

我有一個令人困惑的問題。我有一個MainActivity有兩個操作:Update和Logout。問題是當我運行的活動延伸ListActivity操作欄不出現。 下面我有2張圖片包含有2個不同的在MainActivity當擴展ListActivity時,ActionBar不工作

延伸類型擴展ActionBarActivity例如

public class MainActivity extends ActionBarActivity 

通過延伸ListActivity的結果是相同的,如下面的圖片。基本上,我想使主要活動的ListView和一個ction酒吧,使用戶能夠更新註銷使用操作欄。但它似乎不起作用,我需要你的幫助。我試圖在網上搜索,我找不到任何幫助。

public class MainActivity extends ListActivity 

在這裏你可以看到我的清單文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.florin.statusapp" > 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-sdk android:minSdkVersion="11" 
     android:targetSdkVersion="21"/> 
    <application 

     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      > 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

     </activity> 
     <activity 
      android:name=".RegisterActivity" 
      android:label="@string/title_activity_register" > 
     </activity> 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/title_activity_login" > 
     </activity> 
     <activity 
      android:name=".UpdateStatusActivity" 
      android:label="@string/title_activity_update_status" > 


     </activity> 
    </application> 

</manifest> 

我MainActivity.java

public class MainActivity extends ListActivity{ 

private List<ParseObject> mStatusObjects; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Enable Local Datastore. 
    Parse.initialize(this, "foo", "bar"); 


    ParseUser currentUser = ParseUser.getCurrentUser(); 
    if (currentUser != null) { 



    } else { 
     // show the login screen 
     Intent toLoginActivity = new Intent(MainActivity.this, LoginActivity.class); 
     startActivity(toLoginActivity); 

    } 


} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    //getMenuInflater().inflate(R.menu.menu_main, menu); 
    //return true; 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_main, menu); 
    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(); 

    //noinspection SimplifiableIfStatement 
    switch (id) { 
     case R.id.updateStatus: 
      // take user to update activity 
      Intent toMainActivityIntent = new Intent(MainActivity.this, UpdateStatusActivity.class); 
      startActivity(toMainActivityIntent); 
      break; 

     case R.id.LogoutUser: 
      //Log out user 
      ParseUser.logOut(); 
      // take user to login activity 
      Intent toLoginActivityIntent = new Intent(MainActivity.this, LoginActivity.class); 
      startActivity(toLoginActivityIntent); 
      break; 
    } 

    return super.onOptionsItemSelected(item); 
} 

和操作欄中menu_main.xml

<menu 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" 
    tools:context="com.example.florin.statusapp.MainActivity"> 
    <item android:id="@+id/updateStatus" 
     android:title="Update" 
     app:showAsAction="always" /> 

    <item 
     android:id="@+id/LogoutUser" 
     android:title="Logout" 
     app:showAsAction="never" 

     /> 

</menu> 
+0

在'ListView'中使用'ActionBarActivity'。 – 2015-01-27 01:00:00

+1

看起來你是在從Udemy的講座教程工作羅尼:) – Heisenberg 2015-06-07 17:48:52

+0

檢查: http://stackoverflow.com/questions/18532346/adding-actionbar-to-listactivity – 2015-07-02 21:35:07

回答

15

這應該與你的主題有關。操作欄僅在holo後支持主題。

http://developer.android.com/guide/topics/ui/actionbar.html#Adding

你styles.xml可能有類似:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

你可以把它改成這個使用全息主題:

<style name="AppTheme" parent="android:Theme.Holo"> 
+1

感謝您的幫助,我非常感謝。是的,但事情是我如何擴展'ListActivity'爲我的列表視圖,當我還必須擴展'ActionBarActivity'。我需要使用ListActivity,但我也想要一個操作欄,我不知道該怎麼做。 – 2015-01-26 23:44:35

+0

在java中,不支持多重繼承,所以擴展兩者都是不可能的。 – AshesToAshes 2015-03-22 05:17:43

+0

這對我有用,我可以再次看到我的操作欄,但我的菜單項顯示在操作欄上而不是菜單中。現在它回到了菜單中。有什麼想法嗎? – dawoodman71 2016-10-14 12:49:31

6

正如Tachyonflux說,在API 11及更高版本,操作欄包含在所有使用Theme.Holo或其後代的活動中

嘗試添加下列到AndroidManifest.xml

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Holo"> 

或者其他主題或您選擇。轉到Tachyonflux的鏈接並查看可用選項。有各種默認選項,但您也可以創建自己的選項。

+1

看來我的當前主題AppTheme只能通過擴展ActionBarActivity來工作。我改變主題爲'Theme.Holo',如你所說,但我的按鈕仍然不出現在右上角。只有當我按菜單按鈕,我可以看到操作欄按鈕,這不是我想要的在這種情況下。 – 2015-01-26 23:47:25