android 自定义adapter
来源:互联网 发布:utc转换北京时间 java 编辑:程序博客网 时间:2024/06/05 10:59
Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView, GridView, Gallery等,而android的adapter又有很多种(ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter) 今天挑选其中几种做笔记,方便日后温故。
1用BaseAdapter实现如下效果:
Item 的activity_main.xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/im_greens" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/safe" android:layout_marginTop="3px" android:text="@string/hello_world" /> <TextView android:layout_below="@id/im_greens" android:id="@+id/tv_greens" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="剁椒鱼头" android:textSize="16sp" /> <TextView android:id="@+id/tv_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/im_greens" android:layout_marginLeft="35px" android:layout_marginTop="30px" android:text="价格:" android:textSize="22sp" /> <TextView android:id="@+id/tv_price_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30px" android:layout_toRightOf="@id/tv_price" android:layout_marginLeft="55px" android:textColor="#E00703" android:text="58元" android:textSize="22sp" /></RelativeLayout>
greens_listview.xml文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="40dip" android:gravity="center_vertical|center_horizontal" android:background="#619854" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#E8F2FE" android:text="菜谱" /> </LinearLayout><ListView android:id="@+id/listview_greens" android:layout_width="wrap_content" android:layout_height="wrap_content" android:horizontalSpacing="10dip" android:verticalSpacing="10dip" ></ListView></LinearLayout>
Activity代码:
package com.example.adapter;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {private ListView lsitview_greens;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.greens_listview);MyApater adapter = new MyApater();lsitview_greens = (ListView) findViewById(R.id.listview_greens);lsitview_greens.setAdapter(adapter);}//自定义Adapterclass MyApater extends BaseAdapter{//用于显示菜品的图片int[] images = {R.drawable.safe,R.drawable.safe,R.drawable.safe,R.drawable.safe,R.drawable.safe,R.drawable.safe,R.drawable.safe,R.drawable.safe,R.drawable.safe};//用于显示菜名String[] name = new String[]{"宫保鸡丁","糖醋排骨","麻婆豆腐","红烧鱼","回锅肉","辣椒炒肉","醋溜土豆丝","大蒜腊牛肉","红烧排骨"};//用于显示价格String[] price = new String[]{"32¥","22¥","15¥","94¥","45¥","15¥","20¥","45¥","85¥"};@Overridepublic int getCount() {// TODO Auto-generated method stubreturn name.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if(convertView == null){//根据布局文件获取View返回值convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_main, null);}ImageView imageview = (ImageView) convertView.findViewById(R.id.im_greens);TextView greens_name = (TextView) convertView.findViewById(R.id.tv_greens);TextView greens_price = (TextView) convertView.findViewById(R.id.tv_price_2);imageview.setImageResource(images[position]);greens_name.setText(name[position]);greens_price.setText(price[position]);return convertView;}}}
2 通过BaseAdapter填充GridView实现九宫格的效果:
Item的mainscreen_item.xml文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dip" android:layout_height="100dip" android:paddingTop="10dip" android:paddingLeft="10dip" android:gravity="center_horizontal|center_vertical" android:background="@drawable/item_background_selector" android:orientation="vertical" > <ImageView android:id="@+id/imageView_mainscreen_Item" android:layout_width="60dip" android:layout_height="60dip" android:src="@drawable/ic_launcher" android:scaleType="fitXY" /><TextView android:id="@+id/textView_mainscreen_Item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@color/textcolor" android:text="功能名字" /></LinearLayout>
activity_main.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="match_parent" android:background="@color/backgroundcolor" android:orientation="vertical" ><LinearLayout android:layout_width="match_parent" android:layout_height="40dip" android:background="@drawable/title_background" android:gravity="center_vertical|center_horizontal" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#fff8f8f8" android:textSize="25sp" android:text="手机卫士" /></LinearLayout> <GridView android:listSelector="@drawable/item_background_selector" android:id="@+id/gv_main" android:numColumns="3" android:layout_width="match_parent" android:layout_height="match_parent" android:horizontalSpacing="10dip" android:verticalSpacing="10dip" ></GridView> </LinearLayout>
MainUiAdapter:是自定义的一个adapter类,在MainActivity中调用,它的主要作用是填充所需数据
package com.iponeguardian.adapter;import com.example.iponeguardian.R;import android.content.Context;import android.content.SharedPreferences;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class MainUiAdapter extends BaseAdapter {private Context context;private LayoutInflater inflater; //布局文件填充器private static ImageView imageView;//显示图片的控件private static TextView textView; //显示文字的控件private SharedPreferences sp; //持久化数据//程序九宫格主界面所需图片以及文字private String[] name ={"手机防盗","通讯卫士","软件管理","任务管理","流量管理","手机杀毒","系统优化","高级工具","设置中心"}; private static int[] icon = {R.drawable.widget09,R.drawable.widget02,R.drawable.widget01,R.drawable.widget07,R.drawable.widget05,R.drawable.widget04,R.drawable.widget06,R.drawable.widget03,R.drawable.widget08};public MainUiAdapter(Context context) {this.context = context;inflater = LayoutInflater.from(context);sp = context.getSharedPreferences("config", context.MODE_PRIVATE);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn name.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View contentview, ViewGroup parent) {//得到布局文件View view = inflater.inflate(R.layout.mainscreen_item, null);imageView = (ImageView) view.findViewById(R.id.imageView_mainscreen_Item);textView = (TextView) view.findViewById(R.id.textView_mainscreen_Item);imageView.setImageResource(icon[position]);textView.setText(name[position]);if(position == 0){String name = sp.getString("lost_name", null);if(name!=null){textView.setText(name);}}return view;}}
MainActivity,程序入口(里面有些内容没有做修改):
package com.iponeguardian.ui;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.EditText;import android.widget.GridView;import android.widget.TextView;import android.widget.Toast;import com.example.iponeguardian.R;import com.iponeguardian.adapter.MainUiAdapter;import com.iponeguardian.utile.UpdateManagerTest;public class MainActivity extends Activity implements OnItemClickListener{private GridView gv_main;private MainUiAdapter adapter;private SharedPreferences preferences; //用来持久化一些配置信息@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);preferences = this.getSharedPreferences("config", Context.MODE_PRIVATE);adapter = new MainUiAdapter(this);gv_main = (GridView)this.findViewById(R.id.gv_main);gv_main.setAdapter(adapter);//设置条目点击事件gv_main.setOnItemClickListener(this);//为第一个条目设置长按的点击事件gv_main.setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, final View view,int position, long id) {if(position==0){AlertDialog.Builder builder = new Builder(MainActivity.this); builder.setTitle("重命名");builder.setMessage("请输入要更改的名称");final EditText editText = new EditText(MainActivity.this);editText.setText("请输入文本");builder.setView(editText);builder.setPositiveButton("确定", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {String name = editText.getText().toString().trim();if("".equals(name)){Toast.makeText(getApplicationContext(), "内容不能为空", 1).show();return ;}else{//新建一个文件,持久化数据,用来存储更改的名字Editor editor = preferences.edit();editor.putString("lost_name", name);editor.commit();//设置新的名字TextView textView = (TextView) view.findViewById(R.id.textView_mainscreen_Item);textView.setText(name);}}});builder.setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.create().show();}return false;}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.UpdateManagerTest managerTest = new UpdateManagerTest(getApplicationContext());managerTest.checkUpdate();return false;}/** * 点击某一个条目调用的方法 * parent:gradView * view: 当前被点击的条目 * position:点击条目所对应的位置 * id: 行号 */@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {// TODO Auto-generated method stubswitch (position) {case 0:Intent lostProtectedIntent = new Intent(MainActivity.this,LostProtectedActivity.class);startActivity(lostProtectedIntent);break;//点击通讯卫士case 1:Intent callSmsIntent = new Intent(MainActivity.this,CallSmsActivity.class);startActivity(callSmsIntent);break;//点击高级工具case 7:Intent atoolsintent = new Intent(MainActivity.this,AtoolsActivity.class);startActivity(atoolsintent);break;}}}
2 0
- android自定义Adapter
- Android 中自定义 Adapter
- Android之自定义Adapter
- android自定义adapter
- Android 中自定义 Adapter
- Android自定义adapter
- Android自定义Adapter适配器
- android 自定义adapter
- android 自定义Adapter
- Android GridView自定义Adapter
- android AutoCompleteTextView自定义Adapter
- Android 自定义Adapter
- android自定义Adapter
- Android自定义Adapter
- Android 自定义adapter(一)
- Android 自定义adapter(二)
- android自定义adapter
- Android自定义adapter
- firefox 下 'innerText' works in IE, but not in Firefox
- 课程设计(未完)
- 常用的JavaScript验证正则表达式
- java web EXCEL导入的实现
- 【LeetCode】Remove Nth Node From End of List
- android 自定义adapter
- FQDN (fully qualified domain name,完全限定域名)
- signal(SIGPIPE, SIG_IGN) 解析
- 软件定时器-闹钟提醒我们该吃饭吃饭,该睡觉睡觉
- 语义化标签应注意的一些问题
- Android系统开发(移植)和应用开发
- JavaScript验证表单大全
- pcb画板注意事项
- http协议