2013-12-11 5 views
20

В настоящее время я строил как минимум SDK из 10, поэтому мне нужно использовать библиотеку android-support-v7-appcompat для реализации ActionBar. Я установил ActionBar, но теперь хочу добавить ListActivity, однако для этого требуется расширение моего класса, а Java не имеет нескольких inheritance. Что мне делать?Объединение ListActivity и 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

поэтому, если вы уже используете библиотеку поддержки, используйте ListFragment – Selvin

+0

Конечно, но как я могу расширить класс, чтобы он включал ActionBarActivity и ListFragment? –

ответ

21

ListActivity не был перенесен в AppCompat. Вероятно, потому что вы должны считать его «устаревшим», а вместо этого использовать ListFragment.

Фрагменты будут работать с ActionBarActivity, просто убедитесь, что они являются фрагментами из библиотеки поддержки.

Прочитать this ссылка о фрагментах.

Для вашего случая использования я бы просто определил фрагмент в xml.

+0

Работает отлично, спасибо! –

+2

Примите ответ, если он ответил на ваш вопрос :) – athor

11

Самый простой способ сделать это - использовать ListFragment внутри ActionBarActivity. Я сделал это вот так:

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

Таким образом, для этого вам даже не нужен xml, и он работает хорошо.

Смежные вопросы