2013-12-11 11 views
20

Ich baue derzeit für ein Minimum SDK von 10, also muss ich die android-support-v7-appcompat Bibliothek verwenden, um ActionBar zu implementieren. Ich habe die ActionBar eingerichtet, aber ich möchte jetzt eine ListActivity hinzufügen, aber dies erfordert die Erweiterung meiner Klasse und Java hat nicht mehrere inheritance. Was soll ich machen?Kombinieren von ListActivity und ActionBarActivity

public class MainActivity extends ActionBarActivity { 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu items for use in the action bar 
    MenuInflater inflater = getMenuInflater(); 
    getSupportActionBar().setIcon(R.drawable.ic_action_search); 
    getSupportActionBar().setDisplayShowHomeEnabled(false); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    inflater.inflate(R.menu.main_activity_actions, menu); 
    return super.onCreateOptionsMenu(menu); 
    } 

} 
+1

Wenn Sie also bereits Support-Bibliothek verwenden dann verwenden Sie ListFragment – Selvin

+0

Sicher aber wie kann ich die Klasse erweitern, so dass es ActionBarActivity und ListFragment enthält? –

Antwort

21

ListActivity wurde nicht auf AppCompat portiert. Wahrscheinlich, weil Sie es als "veraltet" betrachten sollten und stattdessen ein ListFragment verwenden.

Fragmente funktionieren mit einer ActionBarActivity, stellen Sie nur sicher, dass sie Fragmente aus der Support-Bibliothek sind.

Lesen Sie this Link über Fragmente.

Für Ihren Anwendungsfall würde ich nur das Fragment in XML definieren.

+0

Funktioniert perfekt, danke! –

+2

Akzeptieren Sie die Antwort, wenn Sie Ihre Frage beantwortet haben :) – athor

11

Der einfachste Weg, dies zu tun ist eine ListFragment innerhalb der ActionBarActivity zu verwenden. Ich habe es so gemacht:

public class MyActivity extends ActionBarActivity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     MyFragment fragment = new MyFragment(); 
     getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit(); 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: { 
       finish(); 
       break; 
      } 

      default: { 
       break; 
      } 
     } 
     return true; 
    } 

    public static class MyFragment extends ListFragment { 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      ... 
     } 

     public void onListItemClick(ListView listView, View view, int position, long id) { 
      ... 
     } 
    } 
} 

So brauchen Sie nicht einmal ein Xml für sie, und es funktioniert gut.

Verwandte Themen