您的位置:首页 > 产品设计 > UI/UE

UI组件之AdapterView及其子类(五)ListView组件和ListActivity

2017-06-25 20:25 525 查看

ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项https://www.geek-share.com/detail/2663914762.html。在当中都要在xml文件里定义ListView组件,然后再Activity.java文件里通过findViewById获取组件设置定义好的adapter就可以。

可是ListActivity是直接继承Activity的,在ListActivity的源代码中已经定义了一个ListView组件属性。ListActivity的子类无需调用setContentView()来显示某个界面,ListActivity的效果就是整个Activity就是一个列表,没有其它的组件。在使用ListActivity时,仅仅须要继承ListActivity,直接传入一个内容Adapter。

ListActivity就是一个列表.

MainActivity.java

<span style="font-size:24px;">public class MainActivity extends ListActivity {//继承ListActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//无需使用布局文件,-相当于它的布局文件里仅仅有一个ListView
String[] s={"孙悟空","猪八戒","唐僧"};
//创建ArrayAdapter对象,这里使用的是android提供的布局文件
//ArrayAdapter<String>  ad=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,s);
//以下是使用自己定义的一个列表项布局
ArrayAdapter<String>  ad=new ArrayAdapter<String>(this,R.layout.array_item,s);

//设置适配器
setListAdapter(ad);
}</span>

总结一下:

1,继承ListActivity

2。定义适当的Adapter

3。调用setListAdapter方法设置Adapter

ListActivity的部分源代码:

public class ListActivity extends Activity {
/**
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
protected ListAdapter mAdapter;
/**
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
protected ListView mList;

private Handler mHandler = new Handler();
private boolean mFinishedStart = false;

private Runnable mRequestFocus = new Runnable() {
public void run() {
mList.focusableViewAvailable(mList);
}
};

/**
* This method will be called when an item in the list is selected.
* Subclasses should override. Subclasses can call
* getListView().getItemAtPosition(position) if they need to access the
* data associated with the selected item.
*
* @param l The ListView where the click happened
* @param v The view that was clicked within the ListView
* @param position The position of the view in the list
* @param id The row id of the item that was clicked
*/
protected void onListItemClick(ListView l, View v, int position, long id) {
}

/**
* Ensures the list view has been created before Activity restores all
* of the view states.
*
*@see Activity#onRestoreInstanceState(Bundle)
*/
@Override
protected void onRestoreInstanceState(Bundle state) {
ensureList();
super.onRestoreInstanceState(state);
}

/**
* @see Activity#onDestroy()
*/
@Override
protected void onDestroy() {
mHandler.removeCallbacks(mRequestFocus);
super.onDestroy();
}

/**
* Updates the screen state (current list and other views) when the
* content changes.
*
* @see Activity#onContentChanged()
*/
@Override
public void onContentChanged() {
super.onContentChanged();
View emptyView = findViewById(com.android.internal.R.id.empty);
mList = (ListView)findViewById(com.android.internal.R.id.list);
if (mList == null) {
throw new RuntimeException(
"Your content must have a ListView whose id attribute is " +
"'android.R.id.list'");
}
if (emptyView != null) {
mList.setEmptyView(emptyView);
}
mList.setOnItemClickListener(mOnClickListener);
if (mFinishedStart) {
setListAdapter(mAdapter);
}
mHandler.post(mRequestFocus);
mFinishedStart = true;
}

/**
* Provide the cursor for the list view.
*/
public void setListAdapter(ListAdapter adapter) {
synchronized (this) {
ensureList();
mAdapter = adapter;
mList.setAdapter(adapter);
}
}

/**
* Set the currently selected list item to the specified
* position with the adapter's data
*
* @param position
*/
public void setSelection(int position) {
mList.setSelection(position);
}

/**
* Get the position of the currently selected list item.
*/
public int getSelectedItemPosition() {
return mList.getSelectedItemPosition();
}

/**
* Get the cursor row ID of the currently selected list item.
*/
public long getSelectedItemId() {
return mList.getSelectedItemId();
}

/**
* Get the activity's list view widget.
*/
public ListView getListView() {
ensureList();
return mList;
}

/**
* Get the ListAdapter associated with this activity's ListView.
*/
public ListAdapter getListAdapter() {
return mAdapter;
}

private void ensureList() {
if (mList != null) {
return;
}
setContentView(com.android.internal.R.layout.list_content_simple);

}

private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
onListItemClick((ListView)parent, v, position, id);
}
};
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐