最后前端到底应该怎么学才好?
如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。
不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
public ListSimpleAdpter(Context context, List
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”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】