2013-12-11 12 views
20

Attualmente sto creando un minimo di SDK su 10, quindi devo utilizzare la libreria android-support-v7-appcompat per implementare ActionBar. Ho installato il ActionBar, ma ora voglio aggiungere un ListActivity, tuttavia ciò richiede l'estensione della mia classe e Java non ha più inheritance. Cosa dovrei fare?Combinare ListActivity e 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

quindi, se si sta già utilizzando la libreria di supporto, utilizzare ListFragment – Selvin

+0

Certo, ma come estendere la classe in modo che includa ActionBarActivity e ListFragment? –

risposta

21

ListActivity non è stato portato su AppCompat. Probabilmente perché dovresti considerarlo "deprecato", e invece usare un ListFragment.

I frammenti funzioneranno con ActionBarActivity, ma assicurati che siano frammenti dalla libreria di supporto.

Leggere il collegamento this sui frammenti.

Per il tuo caso d'uso, vorrei semplicemente definire il frammento in xml.

+0

Funziona perfettamente, grazie! –

+2

Accetta la risposta se ha risposto alla tua domanda :) – athor

11

Il modo più semplice per eseguire questa operazione è utilizzare lo ListFragment all'interno dello ActionBarActivity. L'ho fatto in questo modo:

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) { 
      ... 
     } 
    } 
} 

In questo modo non avrete nemmeno bisogno di un XML per esso, e funziona bene.

Problemi correlati