ListView
Listview:一个View来显示垂直滚动的的下拉列表。 android xml属性: android:divider:listiview中每个item之间的分隔线 可以设置color android:dividerHeight:分隔符的高度。 android:entries:引用一个将使用在此ListView里的数组。若数组是固定的,使用此属性将比在程序中写入更为简单。 android:footerdividersenabled:设成flase时,此ListView将不会在页脚视图前画分隔符。此属性缺省值为true。 android:headerDividersEnabled:设成flase时,此ListView将不会在页眉视图后画分隔符。此属性缺省值为true。 android:choicMode:none=0 表示无选择模式 / singlechoice=1 表示只能选择一项 / multipleChoice=2 表示可以多选
1 android and lists
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentBottom="true" android:layout_alignParentTop="true" android:layout_marginRight="6dip" android:contentDescription="TODO" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/secondLine" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_toRightOf="@id/icon" android:ellipsize="marquee" android:singleLine="true" android:text="Description" android:textSize="12sp" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@id/secondLine" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:layout_toRightOf="@id/icon" android:gravity="center_vertical" android:text="Example application" android:textSize="16sp" /> </RelativeLayout> 2.default arrayAdapter xml <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview" android:layout_width="wrap_content" android:layout_height="wrap_content" />
ListViewExampleActivity.calss public class ListViewExampleActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listviewexampleactivity); final ListView listview = (ListView) findViewById(R.id.listview); String[] values = new String[] { "Android","iPhone","WindowsMobile","Blackberry","WebOS","Ubuntu","Windows7","Max OS X","Linux","OS/2","Android","WindowsMobile" }; final ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < values.length; ++i) { list.add(values[i]); } final StableArrayAdapter adapter = new StableArrayAdapter(this,android.R.layout.simple_list_item_1,list); listview.setAdapter(adapter); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent,final View view,int position,long id) { final String item = (String) parent.getItemAtPosition(position); view.animate().setDuration(2000).alpha(0) .withEndAction(new Runnable() { @Override public void run() { list.remove(item); adapter.notifyDataSetChanged(); view.setAlpha(1); } }); } }); } private class StableArrayAdapter extends ArrayAdapter<String> { HashMap<String,Integer> mIdMap = new HashMap<String,Integer>(); public StableArrayAdapter(Context context,int textViewResourceId,List<String> objects) { super(context,textViewResourceId,objects); for (int i = 0; i < objects.size(); ++i) { mIdMap.put(objects.get(i),i); } } @Override public long getItemId(int position) { String item = getItem(position); return mIdMap.get(item); } @Override public boolean hasStableIds() { return true; } } }
3.自定义的adapter
note:此布局增压泵服务可以通过访问getLayoutInflator()方法的活动或通过context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)方法调用。 public class MySimpleArrayAdapter extends ArrayAdapter<String> { private final Context context; private final String[] values; public MySimpleArrayAdapter(Context context,String[] values) { super(context,R.layout.rowlayout,values); this.context = context; this.values = values; } @Override public View getView(int position,View convertView,ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.rowlayout,parent,false); TextView textView = (TextView) rowView.findViewById(R.id.label); ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); textView.setText(values[position]); // change the icon for Windows and iPhone String s = values[position]; if (s.startsWith("iPhone")) { imageView.setImageResource(R.drawable.no); } else { imageView.setImageResource(R.drawable.ok); } return rowView; } }
4.listactivity and listFragment public class MyListFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String[] values = new String[] { "Android","OS/2" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),values); setListAdapter(adapter); } @Override public void onListItemClick(ListView l,View v,long id) { // do something with the data } }
public class MyListActivity extends ListActivity { public void onCreate(Bundle icicle) { super.onCreate(icicle); String[] values = new String[] { "Android","OS/2" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,values); setListAdapter(adapter); } }
5.ListView and ListActivity public class MyListActivity extends ListActivity { public void onCreate(Bundle icicle) { super.onCreate(icicle); String[] values = new String[] { "Android",values); setListAdapter(adapter); } @Override protected void onListItemClick(ListView l,long id) { String item = (String) getListAdapter().getItem(position); Toast.makeText(this,item + " selected",Toast.LENGTH_LONG).show(); } }
6.listActivity 自己的Layout xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/icon" android:layout_width="22px" android:layout_height="22px" android:layout_marginLeft="4px" android:layout_marginRight="10px" android:layout_marginTop="4px" android:src="@drawable/ic_launcher" > </ImageView> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@+id/label" android:textSize="20px" > </TextView> </LinearLayout> public class MyListActivity extends ListActivity { public void onCreate(Bundle icicle) { super.onCreate(icicle); String[] values = new String[] { "Android","OS/2" }; // use your custom layout ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.id.label,values); setListAdapter(adapter); } @Override protected void onListItemClick(ListView l,Toast.LENGTH_LONG).show(); } }
7.实现自己的适配器 public class MySimpleArrayAdapter extends ArrayAdapter<String> { private final Context context; private final String[] values; public MySimpleArrayAdapter(Context context,values); this.context = context; this.values = values; } @Override public View getView(int position,false); TextView textView = (TextView) rowView.findViewById(R.id.label); ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); textView.setText(values[position]); // Change the icon for Windows and iPhone String s = values[position]; if (s.startsWith("Windows7") || s.startsWith("iPhone") || s.startsWith("Solaris")) { imageView.setImageResource(R.drawable.no); } else { imageView.setImageResource(R.drawable.ok); } return rowView; } } public class MyListActivity extends ListActivity { public void onCreate(Bundle icicle) { super.onCreate(icicle); String[] values = new String[] { "Android","OS/2" }; MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this,values); setListAdapter(adapter); } }
8.上下文ListViews行动模式 public class MyListActivityActionbar extends ListActivity { protected Object mActionMode; public int selectedItem = -1; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); String[] values = new String[] { "Android","OS/2" }; MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this,values); setListAdapter(adapter); getListView().setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent,View view,long id) { if (mActionMode != null) { return false; } selectedItem = position; // start the CAB using the ActionMode.Callback defined above mActionMode = MyListActivityActionbar.this .startActionMode(mActionModeCallback); view.setSelected(true); return true; } }); } private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { // called when the action mode is created; startActionMode() was called public boolean onCreateActionMode(ActionMode mode,Menu menu) { // Inflate a menu resource providing context menu items MenuInflater inflater = mode.getMenuInflater(); // assumes that you have "contexual.xml" menu resources inflater.inflate(R.menu.rowselection,menu); return true; } // the following method is called each time // the action mode is shown. Always called after // onCreateActionMode,but // may be called multiple times if the mode is invalidated. public boolean onPrepareActionMode(ActionMode mode,Menu menu) { return false; // Return false if nothing is done } // called when the user selects a contextual menu item public boolean onActionItemClicked(ActionMode mode,MenuItem item) { switch (item.getItemId()) { case R.id.menuitem1_show: show(); // the Action was executed,close the CAB mode.finish(); return true; default: return false; } } // called when the user exits the action mode public void onDestroyActionMode(ActionMode mode) { mActionMode = null; selectedItem = -1; } }; private void show() { Toast.makeText(MyListActivityActionbar.this,String.valueOf(selectedItem),Toast.LENGTH_LONG).show(); } }
9.在列表视图中选择多个项目 @ model.class public class Model { private String name; private boolean selected; public Model(String name) { this.name = name; selected = false; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } }
@@ rowbuttonlayout.xml. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@+id/label" android:textSize="30px" > </TextView> <CheckBox android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginLeft="4px" android:layout_marginRight="10px" > </CheckBox> </RelativeLayout> @@@ InteractiveArrayAdapter public class InteractiveArrayAdapter extends ArrayAdapter<Model> { private final List<Model> list; private final Activity context; public InteractiveArrayAdapter(Activity context,List<Model> list) { super(context,R.layout.rowbuttonlayout,list); this.context = context; this.list = list; } static class ViewHolder { protected TextView text; protected CheckBox checkbox; } @Override public View getView(int position,ViewGroup parent) { View view = null; if (convertView == null) { LayoutInflater inflator = context.getLayoutInflater(); view = inflator.inflate(R.layout.rowbuttonlayout,null); final ViewHolder viewHolder = new ViewHolder(); viewHolder.text = (TextView) view.findViewById(R.id.label); viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); viewHolder.checkbox .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { Model element = (Model) viewHolder.checkbox .getTag(); element.setSelected(buttonView.isChecked()); } }); view.setTag(viewHolder); viewHolder.checkbox.setTag(list.get(position)); } else { view = convertView; ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); } ViewHolder holder = (ViewHolder) view.getTag(); holder.text.setText(list.get(position).getName()); holder.checkbox.setChecked(list.get(position).isSelected()); return view; } } @@@@ MyList public class MyList extends ListActivity { /** Called when the activity is first created. */ public void onCreate(Bundle icicle) { super.onCreate(icicle); // create an array of Strings,that will be put to our ListActivity ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this,getModel()); setListAdapter(adapter); } private List<Model> getModel() { List<Model> list = new ArrayList<Model>(); list.add(get("Linux")); list.add(get("Windows7")); list.add(get("Suse")); list.add(get("Eclipse")); list.add(get("Ubuntu")); list.add(get("Solaris")); list.add(get("Android")); list.add(get("iPhone")); // Initially select one of the items list.get(1).setSelected(true); return list; } private Model get(String s) { return new Model(s); } }
单选 、多选、:http://blog.csdn.net/fx_sky/article/details/9381651
10 expandable listView @activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ExpandableListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" > </ExpandableListView> </LinearLayout>
@@ listrow_group.xml. <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="?android:attr/listPreferredItemHeight" android:layout_marginLeft="8dp" android:drawableRight="@drawable/ic_launcher" android:gravity="left" android:paddingLeft="32dp" android:paddingTop="8dp" android:text="Test" android:textSize="14sp" android:textAlignment="textEnd" android:textStyle="bold" />
listrow_details.xml. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="40dp" android:clickable="true" android:orientation="vertical" android:paddingLeft="40dp" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_launcher" android:drawablePadding="5dp" android:gravity="center_vertical" android:text="@string/hello_world" android:textSize="14sp" android:textStyle="bold" > </TextView> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/black" /> </LinearLayout>
@@@ MyExpandableListAdapter public class MyExpandableListAdapter extends BaseExpandableListAdapter { private final SparseArray<Group> groups; public LayoutInflater inflater; public Activity activity; public MyExpandableListAdapter(Activity act,SparseArray<Group> groups) { activity = act; this.groups = groups; inflater = act.getLayoutInflater(); } @Override public Object getChild(int groupPosition,int childPosition) { return groups.get(groupPosition).children.get(childPosition); } @Override public long getChildId(int groupPosition,int childPosition) { return 0; } @Override public View getChildView(int groupPosition,final int childPosition,boolean isLastChild,ViewGroup parent) { final String children = (String) getChild(groupPosition,childPosition); TextView text = null; if (convertView == null) { convertView = inflater.inflate(R.layout.listrow_details,null); } text = (TextView) convertView.findViewById(R.id.textView1); text.setText(children); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(activity,children,Toast.LENGTH_SHORT).show(); } }); return convertView; } @Override public int getChildrenCount(int groupPosition) { return groups.get(groupPosition).children.size(); } @Override public Object getGroup(int groupPosition) { return groups.get(groupPosition); } @Override public int getGroupCount() { return groups.size(); } @Override public void onGroupCollapsed(int groupPosition) { super.onGroupCollapsed(groupPosition); } @Override public void onGroupExpanded(int groupPosition) { super.onGroupExpanded(groupPosition); } @Override public long getGroupId(int groupPosition) { return 0; } @Override public View getGroupView(int groupPosition,boolean isExpanded,ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.listrow_group,null); } Group group = (Group) getGroup(groupPosition); ((CheckedTextView) convertView).setText(group.string); ((CheckedTextView) convertView).setChecked(isExpanded); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition,int childPosition) { return false; } }
@@@@ MainActivity public class MainActivity extends Activity { // more efficient than HashMap for mapping integers to objects SparseArray<Group> groups = new SparseArray<Group>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createData(); ExpandableListView listView = (ExpandableListView) findViewById(R.id.listView); MyExpandableListAdapter adapter = new MyExpandableListAdapter(this,groups); listView.setAdapter(adapter); } public void createData() { for (int j = 0; j < 5; j++) { Group group = new Group("Test " + j); for (int i = 0; i < 5; i++) { group.children.add("Sub Item" + i); } groups.append(j,group); } } }
11.listiview Header and Footer public class MyList extends ListActivity { /** Called when the activity is first created. */ public void onCreate(Bundle icicle) { super.onCreate(icicle); // create an array of Strings,that will be put to our ListActivity String[] names = new String[] { "Linux","Eclipse","Suse","Solaris","iPhone" }; View header = getLayoutInflater().inflate(R.layout.header,null); View footer = getLayoutInflater().inflate(R.layout.footer,null); ListView listView = getListView(); listView.addHeaderView(header); listView.addFooterView(footer); setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,android.R.id.text1,names)); } } 12SimpleCursorAdapter
public class MyListActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Cursor mCursor = getContacts(); startManagingCursor(mCursor); // now create a new list adapter bound to the cursor. // SimpleListAdapter is designed for binding to a Cursor. ListAdapter adapter = new SimpleCursorAdapter(this,// Context. android.R.layout.two_line_list_item,// Specify the row template // to use (here,two // columns bound to the // two retrieved cursor // rows). mCursor,// Pass in the cursor to bind to. // Array of cursor columns to bind to. new String[] { ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME },// Parallel array of which template objects to bind to those // columns. new int[] { android.R.id.text1,android.R.id.text2 }); // Bind to our new adapter. setListAdapter(adapter); } private Cursor getContacts() { // Run query Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME }; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'"; String[] selectionArgs = null; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; return managedQuery(uri,projection,selection,selectionArgs,sortOrder); } }
解决ListView和Scrollviewd的问题
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |