读书人

Android -ListView + 抉择按钮(转)

发布时间: 2012-08-25 10:06:20 作者: rapoo

Android ---ListView + 选择按钮(转)
在android系中,ListView的用法稍微一,配置Adpater就有方法,如ArrayAdapter,SimpleAdapter等。查了一些上的相例子,有很多都是用ListActivity ,然後用Adapter示布局。本例中有用到ListActivity 。 ListView是在android中是一常用到的控件,ListView面的每子Item可以使用一字符串,也可以是一合控件,下面是本例要的功能清:

1.ListView要示的,使用一或多 保存;
2.建 配器,配器就是Item,有多少元素就生成多少Item;
3.把 配器 添加到ListView,并示出;
4.在ListView的Item添加CheckBox并可以行事件,置事件,的Item示Item的,通getChildAt(0)找控件;
5.按后出menu框效果;
本文所的ListView如下:



UI代如下:




置ListView的 Item式 xml文件如下:



到一步,便解答上面第4:如何置在 ListView中CheckBox之后可以行或按事件,在Android中 CheckBox的事件先比ListView高,面一加,默聚焦在CheckBox上,了防止出,我要在Android的控件上的性加上Bool值:
android:focusable="false"

最后就是Java源代,之后我再一一解答上面的所有:


02 android:orientation="vertical"

03 android:layout_width="fill_parent"

04 android:layout_height="fill_parent"

05 >

06

07

08 <ListView android:id="@+id/ListView01" android:layout_width="wrap_content"

09 android:layout_height="wrap_content"></ListView>

10 </LinearLayout>




置ListView的 Item式 xml文件如下:


view sourceprint?01 <RelativeLayout android:id="@+id/RelativeLayout01"

02 android:layout_width="fill_parent" android:layout_height="wrap_content"

03 android:paddingBottom="4dip"

04 android:paddingLeft="12dip"

05 android:paddingRight="12dip"

06 xmlns:android="http://schemas.android.com/apk/res/android">

07

08 <CheckBox android:id="@+id/CheckBox01"

09 android:layout_alignParentRight="true"

10 android:paddingTop="12dip"

11 android:layout_width="wrap_content"

12 android:focusable="false"

13 android:layout_height="wrap_content"></CheckBox>

14

15 <TextView android:text="TextView1" android:id="@+id/topTextView"

16 android:layout_width="fill_parent"

17 android:textSize="20dip"

18 android:layout_height="wrap_content"></TextView>

19

20

21 <TextView android:text="TextView2" android:id="@+id/bottomTextView"

22 android:layout_below="@+id/topTextView" android:layout_width="fill_parent"

23 android:layout_height="wrap_content"></TextView>

24

25 </RelativeLayout>





到一步,便解答上面第4:如何置在 ListView中CheckBox之后可以行或按事件,在Android中 CheckBox的事件先比ListView高,面一加,默聚焦在CheckBox上,了防止出,我要在Android的控件上的性加上Bool值:
android:focusable="false"


最后就是Java源代,之后我再一一解答上面的所有:


package cn.terry;

import java.util.ArrayList;

import java.util.HashMap;

import android.app.Activity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.MenuItem;

import android.view.View;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.View.OnCreateContextMenuListener;

import android.widget.*;

import android.widget.AdapterView.OnItemClickListener;

public class testListViewAcitivity extends Activity {

private ListView myListView;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

myListView=(ListView)findViewById(R.id.ListView01);



ArrayList<HashMap<String, Object>> listitem=new ArrayList<HashMap<String,Object>>();



for(int i=0;i<10;i++)

{

HashMap<String, Object> map=new HashMap<String, Object>();

map.put("ItemTitle", "文章"+i);

map.put("ItemText", "Android 小目"+i);

listitem.add(map);

}



SimpleAdapter listitemAdapter=new SimpleAdapter(this,//上下文

listitem, //

R.layout.listview_style,//listItem的xml

new String[]{"ItemTitle","ItemText"}, //map的批定Key

new int[]{R.id.topTextView,R.id.bottomTextView} //到要的控件上

);



myListView.setAdapter(listitemAdapter);



myListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {





// TODO Auto-generated method stub

RelativeLayout lr=(RelativeLayout)arg1;

TextView mText=(TextView)lr.getChildAt(1);

Toast.makeText(testListViewAcitivity.this, "你了第"+arg2+"的"+mText.getText().toString(),

1000).show();









}

});

myListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {



@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub



ListView lr=(ListView)v;

RelativeLayout myte=(RelativeLayout)lr.getChildAt(0);

TextView dd=(TextView)myte.getChildAt(1);

menu.setHeaderIcon(R.drawable.icon);

menu.setHeaderTitle(dd.getText().toString());

menu.add(1, 0, 0, "高亮");

menu.add(0, 1, 0, "置");

}

});



}

@Override

public boolean onContextItemSelected(MenuItem item) {

// TODO Auto-generated method stub

String Temp="";

switch (item.getItemId()) {

case 0:

Temp="高亮";

break;

case 1:

Temp="置";

break;

default:

break;

}

Toast.makeText(this, Temp+"理", 1000).show();

return super.onContextItemSelected(item);

}







}
复制代码:

ListView要示的,使用一或多 保存;
建 配器,配器就是Item,有多少元素就生成多少Item;
把 配器 添加到ListView,并示出;
在ListView的Item添加CheckBox并可以行事件,置事件,的Item示item的,通getChildAt(0)找控件;
按后出Menu框效果;
解答:

ListView要示的, 使用泛型可以方便我的取舍,使用HashMap,是了得到key和value之后可以通key去置ListView各控件的值
卡中我用到的代如下:ArrayList<HashMap<String, Object>> listitem=new ArrayList<HashMap<String,Object>>();



for(int i=0;i<10;i++)

{

HashMap<String, Object> map=new HashMap<String, Object>();

map.put("ItemTitle", "文章"+i);

map.put("ItemText", "Android 小目"+i);

listitem.add(map);

}
复制代码

ListView支持多配器 如:SimpleAdapter和ArrayAdapter,本例使用的是SimpleAdapter,先看看simpleAdapter列表,android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
复制代码一:上下文,即可以理解本;
二:支持的源,如我上文定好的ArrayList<HashMap<String, Object>> ;
三:Item的xml,上我建立了ListView的Item式XML,用法如:R.layout.listview_style
四:字符,大致意思可以理解,就是“哪里”,上文我通置HashMap的值,可以通如下方式:new String[]{"ItemTitle","ItemText"},
五:整形,大致意思引用四可以理解,“哪,到哪里去”通事先from的值to某控件如:new int[]{R.id.topTextView,R.id.bottomTextView},注意,里五的控件定要四一一;
代如下:SimpleAdapter listitemAdapter=new SimpleAdapter(this,//上下文

listitem, //

R.layout.listview_style,//listItem的xml

new String[]{"ItemTitle","ItemText"}, //map的批定Key

new int[]{R.id.topTextView,R.id.bottomTextView} //到要的控件上

);
复制代码
己SimpleAdapter置好了。在就到了把SimpleAdapter送到ListView身上就可以,代如下:myListView.setAdapter(listitemAdapter);
复制代码
代,不需要多解;
后如何找到的呢?通,ListView的事件自定位到我事先定好的式xml文件,之后我要做的就是通setOnItemClickListener自的事件View把的控件找出,之后我可以做我想做的事,通getChildAt()的下定位控件,然後成需要的可用控件,再取值或值,代如下:myListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {





// TODO Auto-generated method stub

RelativeLayout lr=(RelativeLayout)arg1;

TextView mText=(TextView)lr.getChildAt(1);

Toast.makeText(testListViewAcitivity.this, "你了第"+arg2+"的"+mText.getText().toString(),

1000).show();









}

});
复制代码
按示框的事件:setOnCreateContextMenuListener,事件:void cn.terry.testListViewAcitivity.onCreate(...).新建 OnCreateContextMenuListener() {...}.onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)



指定: OnCreateContextMenuListener 中的 onCreateContextMenu(...)

public abstract void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)

Since: API Level 1

Called when the context menu for this view is being built. It is not safe to hold onto the menu after this method returns.



Parameters

menu The context menu that is being built

v The view for which the context menu is being built

menuInfo Extra information about the item for which the context menu should be shown. This information will vary depending on the class of v.
复制代码我要做的只要在menu使用menu去建事件按即可,代如下:menu.setHeaderIcon(R.drawable.icon);

menu.setHeaderTitle(dd.getText().toString());

menu.add(1, 0, 0, "高亮");

menu.add(0, 1, 0, "置");
复制代码需要重boolean cn.terry.testListViewAcitivity.onContextItemSelected(MenuItem item)
复制代码事件,此事件行menu按的事件,通Item.getItemId()
方法得到用的某按,然後行命令,考代如下:public boolean onContextItemSelected(MenuItem item) {

// TODO Auto-generated method stub

String Temp="";

switch (item.getItemId()) {

case 0:

Temp="高亮";

break;

case 1:

Temp="置";

break;

default:

break;

}

Toast.makeText(this, Temp+"理", 1000).show();

return super.onContextItemSelected(item);

}
复制代码

到此ListView的基本操作己完成,但存在:

在ListView上片的切不是很理想;
在ListView上按效果,想得到其中某一的Item值下手,道要重View?
使用ArrayList<HashMap<String, Object>> listitem必需New,切!;

读书人网 >Android

热点推荐