Web前端最新Android进阶(十四)Android Adapter详解(3),那些BAT大厂的前端面试官到底在想些什么

最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。

不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

public ListSimpleAdpter(Context context, List<STRING, object=“”>> data, int resource, String[] from, int[] to) {

super(context, data, resource, from, to);

this.context=context;

this.data=data;

this.resource=resource;

this.from=from; }

//item的总行数

@Override

public int getCount() {

return data==null?0:data.size();

}

//item对象

@Override

public Object getItem(int position) {

return position;

}

//item的id

@Override

public long getItemId(int position) {

return position; 

}

//绘制每一个item

@Override

public View getView(int position, View convertView, ViewGroup parent) {

Holder holder = null;

if(convertView==null) {

convertView=LayoutInflater.from(context).inflate(resource, null); 

holder=new Holder(); 

holder.imageView=(ImageView) convertView.findViewById(R.id.listitem_pic); 

holder.title=(TextView) convertView.findViewById(R.id.listitem_title);

holder.content=(TextView) convertView.findViewById(R.id.listitem_content);

convertView.setTag(holder);

} else {

holder=(Holder) convertView.getTag(); 

}

holder.imageView.setImageResource(Integer.parseInt(data.get(position).get(from[0]).toString()));

holder.title.setText(data.get(position).get(from[1]).toString());

holder.content.setText(data.get(position).get(from[2]).toString()); return convertView;

}

class Holder{

ImageView imageView; 

TextView title; 

TextView content;

}

}


第三步:将数据填充到对象中去



listView.setAdapter(simpleAdapter);


这样就完成了数据填充器的数据填充。


下面是一个`SimpleAdapter`的例子:



/--------------------TestUIList.java---------------------------/

public class TestUIList extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ListView list = (ListView) findViewById(R.id.MyListView);

ArrayList> lstImageItem = new ArrayList>();

String[] str1 = { "row one", "row two", "row three", "row four" };

String[] str2 = { "第一行", "第二行", "第三行", "第四行" };

for (int i = 0; i < str1.length; i++) {

  HashMap map = new HashMap();

  map.put("ItemImage", R.drawable.icon);

  map.put("ItemTitle", str1[i]);

  map.put("ItemText", str2[i]);

  lstImageItem.add(map);

}

SimpleAdapter saImageItems = new SimpleAdapter(this,

lstImageItem,

R.layout.simple_list_item_2,

new String[] { "ItemImage", "ItemTitle", "ItemText" },

new int[] { R.id.ItemImage, R.id.ItemTitle, R.id.ItemText });

list.setAdapter(saImageItems);

}

}


如果你的ListView的每一行想实现被点击后有响应事件。最省事的方法是继承一个ListActivity。



`ListActivity`是一个这样的`Activity`:这个Activity能通过绑定到一个像array或cursor这样的数据源来显示一些items的list,并且当用户选了一个item时,能够暴露事件句柄。



`ListActivity`拥有一个`ListView`对象。这个`ListView`对象能够被绑定到不同的数据源,特别是一个数组或者一个拥有查询结果的`Cursor`。`ListActivity`有三种用法,分别是`Binding,Screen Layout`和`Row Layout`。下面仅讨论一下`Screen Layout`:



`ListActivity`有一个默认的layout。这个 layout是由一个在屏幕中央的、单独的、全屏的list构成。然而,如果你想的话,你可以通过在`onCreate()`里调用`setContentView()`方法来设置你自己的view layout的方式制定屏幕layout。



要这样做,你自己的view必须包含一个id为“`@android:id/android:list`”(或者在代码中有list对象)。



当你制定这个view是空的时,你能够包含任何类型的view对象来显示。这个“空list”通知者必须有一个`id“android:empty”`。



注意,最后一定要调用`setListAdapter(adapter)`方法来把通过`Adapter`绑定了数据的这个List显示出来。`setListAdapter`方法间接调用了`Adapter`的getView方法,其作用是返回你想要的view类型。



而且当点击`listView`里的item时,会根据`getView`重画这个`ListView`。想要实现事件监听,就要重写`protected void onListItemClick(ListView l, View v, int position,long id)`方法。



想要把在XML中自定义了一行的view逐行显示在`ListActivity`中自定义的ListView中,并且在每行动态绑定数据的话,一般要自己写一个`MyAdapter`类,这个Adapter继承`BaseAdapter`并且其构造函数中至少有一个List参数来实现动态绑定数据。有两个重要的步骤:


1. 重写getView方法,其中一重要步骤就是用items.get(position)方法来获得被传入的数据。其中items是一个List,它被赋了传入的List参数的值。position是这个数据在ListView中的行数。Get返回的是E类型.即List中的模板类型。
2. 写一个内部类`private class ViewHolder`。这个内部类只有成员变量,它们就是你想在`ListView`中的一行里要显示的小View成分。


## 三、Adapter 应用实战


要想在`Adapter`中动态传入其它类的数据,就要在构造函数中再增加一个(或更多)List参数。



最后给出自己写的MyAdapter配合ListActivity实现监听事件的例子:



/--------------------MyHome.java-----------------------/

public class MyHome extends ListActivity

{

private List items = null;

protected void onCreate(Bundle icicle)

{

	super.onCreate(icicle);

	setContentView(R.layout.main);

	items = new ArrayList();

	String[] titles = { "默认主题", "主题A", "主题B", "中秋佳节", "粉红女郎", "花样年华" };

	for (int i = 0; i < titles.length; i++)

	{

	String title = titles[i];

	items.add(title);

	}

	setListAdapter(new MyAdapter(this, items));

}

@Override

protected void onListItemClick(ListView l, View v, int position, long id)

{

new AlertDialog.Builder(MyHome.this).setItems(

R.array.items_my_dialog, new DialogInterface.OnClickListener()

{

public void onClick(DialogInterface dialog, int whichcountry)

{}

}).show();

}

}

/--------------------MyAdapter.java-----------------------/

public class MyAdapter extends BaseAdapter

{

private LayoutInflater mInflater;

private Bitmap icom_theme;

private Bitmap icon_selected32;

private List items;

public MyAdapter(Context context, List it)

{

mInflater = LayoutInflater.from(context);

items = it;

icom_theme = BitmapFactory.decodeResource(context.getResources(),R.drawable.theme);

icon_selected32=BitmapFactory.decodeResource(context.getResources(), R.drawable.selected32);

}

public int getCount()

{

return items.size();

}

public Object getItem(int position)

{

return items.get(position);

}

public long getItemId(int position)

{

return position;

}

紧跟潮流

大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。

这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值