ActionBarActivity中的"android-support-v7-appcompat"和ListActivity在Same活动中

Mou*_*ice 16 android android-actionbar-compat

如何在扩展ListActivity的活动中使用"android-support-v7-appcompat"的ActionBarActivity.

例如,我有一个活动

public class xxxxxListActivity
  extends ListActivity implements OnItemSelectedListener  { 
  // ...................
} 
Run Code Online (Sandbox Code Playgroud)

在上面的活动中我想使用"ActionBarActivity",但由于java dosent支持多重继承,我无法使其正常工作.

Pat*_*ail 41

这是ActionBarListActivity的一个实现:

public abstract class ActionBarListActivity extends ActionBarActivity {

private ListView mListView;

protected ListView getListView() {
    if (mListView == null) {
        mListView = (ListView) findViewById(android.R.id.list);
    }
    return mListView;
}

protected void setListAdapter(ListAdapter adapter) {
    getListView().setAdapter(adapter);
}

protected ListAdapter getListAdapter() {
    ListAdapter adapter = getListView().getAdapter();
    if (adapter instanceof HeaderViewListAdapter) {
        return ((HeaderViewListAdapter)adapter).getWrappedAdapter();
    } else {
        return adapter;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

就像常规的ListActivity一样,你需要一个包含一个ID为android.R.id.list的ListView的布局(XML中的"@android:id/list").

getListAdapter()中的spiel用于处理已将List视图添加到ListView的情况.看起来像ListView将自己的适配器设置为HeaderViewListAdapter,因此我们必须尝试获取包装的适配器以防止出现错误.

编辑:尝试添加此函数以满足onListItemClick的需要:

protected void onListItemClick(ListView lv, View v, int position, long id) {
    getListView().getOnItemClickListener().onItemClick(lv, v, position, id);
}
Run Code Online (Sandbox Code Playgroud)