您的位置:首页 > 其它

自定义CursorAdapter,实现ListView中动态加载button,和点击事件

2011-07-19 18:59 627 查看
前言:

Android中的自带的CursorAdapter适配器可以加载固定格式的数据绑定。但在实际应用开发中,会碰到ListView中Item项显示根据数据不同,而变化显示。

举例:在我们实际开发中碰到这样的问题

根据一个主题答题情况,显示不同的按钮,且点击按钮后,转到各自的处理界面。

主题状态】第一次答题,显示 【开始】按钮

事件:点击按钮,下载题库,转到答题界面

主题状态】答题还未结束,显示 【继续】按钮

事件:点击按钮,转到答题界面

主题状态】全部答题完成,显示 【重做】按钮

事件:点击按钮,清空答题痕迹,转到答题界面,重新答题

实现的效果图:

View Code
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:id="@+id/relativeLayout1"
android:background="@drawable/cl_itemback"
android:layout_width="wrap_content">
<LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/linearLayout4"  >
<TextView
android:layout_width="60px"
android:layout_height="wrap_content"
android:id="@+id/theme_id"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/linearLayout4"  >
<TextView android:layout_marginLeft="10px" android:textSize="18px" android:textColor="#000000" android:text="" android:id="@+id/txt_themetitle" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<TextView android:layout_marginLeft="10px" android:textSize="14px" android:layout_marginTop="5px" android:textColor="#000000" android:text="" android:id="@+id/txt_themedescribe" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
<LinearLayout  android:gravity="center_vertical" android:orientation="vertical" android:layout_width="wrap_content" android:layout_marginTop="15px"  android:paddingRight="10px" android:layout_height="wrap_content" android:id="@+id/linearLayout4"   android:layout_alignParentRight="true" >
<ImageView android:src="@drawable/cl_begin" android:id="@+id/imgv_exbut" android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
</LinearLayout>
</RelativeLayout>

3.2 自定义CursorAdapter



/* */
public class CursorAdapter_ExecuteTheme extends CursorAdapter {
private LayoutInflater mInflater;
private Context mContext;
TextView theme_id;
public CursorAdapter_ExecuteTheme(Context context, Cursor c) {
super(context, c);
mContext = context;
mInflater = LayoutInflater.from(context);

}

@Override
public void bindView(View view, Context context, Cursor cursor) {

theme_id = (TextView) view.findViewById(R.id.theme_id);
TextView txt_themetitle = (TextView) view.findViewById(R.id.txt_themetitle);
TextView txt_themedescribe=(TextView) view.findViewById(R.id.txt_themedescribe);
ImageView img_exbut=(ImageView)view.findViewById(R.id.imgv_exbut);
theme_id.setText(cursor.getString(0));
txt_themetitle.setText(cursor.getString(2));

//	//pk as _id,catalogFK,Name,3GuessCount,4State,5CurIndex,Describe from CLTheme
txt_themedescribe.setText("已做("+cursor.getString(5)+")全部("+cursor.getString(3) +")");
int state=cursor.getInt(4);
img_exbut.setTag(cursor.getString(0));
if((state==ProjectConstant.ThemeState_BEGGING)||(state==ProjectConstant.ThemeState_NONE))//主题开始
{
if(state==ProjectConstant.ThemeState_BEGGING)
img_exbut.setImageResource(R.drawable.cl_goon);

img_exbut.setOnClickListener(new  ImageView.OnClickListener()
{
public void onClick(View v){
SoundManager.Instance.playSound("SOUND_WELCOME");
String id=v.getTag().toString();
//获取当前主题状态
//创建当前测试业务逻辑并加载选择的主题数据
ExerciseBussiness.SelectTheme(id,ProjectConstant.ThemeType_Classic ,mContext);
Intent i = new Intent((Activity)mContext,ExerciseGuess.class);
i.putExtra("themefk",id);
mContext.startActivity(i);
((Activity)mContext).finish();
}
});
}else if(state==ProjectConstant.ThemeState_END)//重新做
{
img_exbut.setImageResource(R.drawable.cl_redo);
img_exbut.setOnClickListener(new  ImageView.OnClickListener()
{
public void onClick(View v){
SoundManager.Instance.playSound("SOUND_WELCOME");
String id=v.getTag().toString();

ExerciseBussiness.ReDoTheme(id ,mContext);//重新做题
Intent i = new Intent((Activity)mContext,ExerciseGuess.class);
i.putExtra("themefk",id);
mContext.startActivity(i);
((Activity)mContext).finish();
}

});
}
}

@Override
public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
return mInflater.inflate(R.layout.sub_extheme_item, arg2, false);
}

}



3.3 界面后台调用

view sourceprint?

ListView ectheme_list =(ListView)findViewById(R.id.ectheme_list);
ThemeCatalogDataReadHelper model=
new
ThemeCatalogDataReadHelper(
this
);
Cursor cursor =model.GetEcList(
this
.getIntent().getStringExtra(
"catalogpk"
));
CursorAdapter_ExecuteTheme adapter=
new
CursorAdapter_ExecuteTheme(
this
,cursor);
ectheme_list.setAdapter(adapter);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐