2013-12-11 15 views
20

Tôi hiện đang xây dựng tối thiểu SDK trong số 10, vì vậy tôi phải sử dụng thư viện android-support-v7-appcompat để triển khai ActionBar. Tôi đã thiết lập các ActionBar, nhưng tôi muốn bây giờ thêm một ListActivity, tuy nhiên điều này đòi hỏi phải mở rộng lớp của tôi và Java không có nhiều inheritance. Tôi nên làm gì?Kết hợp ListActivity và 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

vì vậy nếu bạn đã sử dụng thư viện hỗ trợ thì hãy sử dụng ListFragment – Selvin

+0

Chắc chắn nhưng làm thế nào tôi có thể mở rộng lớp để nó bao gồm ActionBarActivity và ListFragment? –

Trả lời

21

ListActivity chưa được chuyển đến AppCompat. Có lẽ bởi vì bạn nên xem xét nó 'không được chấp nhận', và thay vì sử dụng một ListFragment.

Các mảnh vỡ sẽ hoạt động với ActionBarActivity, chỉ cần đảm bảo chúng là các mảnh từ thư viện hỗ trợ.

Đọc qua liên kết this về các đoạn.

Đối với trường hợp sử dụng của bạn, tôi sẽ chỉ xác định đoạn trong xml.

+0

Hoạt động hoàn hảo, cảm ơn! –

+2

Chấp nhận câu trả lời nếu nó đã trả lời câu hỏi của bạn :) – athor

11

Cách dễ nhất để thực hiện việc này là sử dụng ListFragment bên trong của ActionBarActivity. Tôi đã làm như sau:

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

Bằng cách này bạn thậm chí không cần xml cho nó và nó hoạt động tốt.

Các vấn đề liên quan