android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_marginLeft=“5dip”
android:layout_marginRight=“5dip”
android:background=“@drawable/ic_calllog_outgoing_nomal” />
<LinearLayout
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_toRightOf=“@+id/call_type”
android:orientation=“vertical” >
<TextView
android:id=“@+id/name”
android:layout_width=“wrap_content”
android:layout_height=“0dip”
android:layout_weight=“1”
android:textAppearance=“?android:textAppearanceMedium”
android:textColor=“#ffffff” />
<TextView
android:id=“@+id/number”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:textAppearance=“?android:textAppearanceSmall”
android:textColor=“#cccccc” />
<TextView
android:id=“@+id/call_btn”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_alignParentRight=“true”
android:layout_centerVertical=“true”
android:layout_marginLeft=“10dip”
android:layout_marginRight=“10dip”
android:background=“@drawable/ic_calllog_call_btn” />
<ImageView
android:id=“@+id/fg”
android:layout_width=“wrap_content”
android:layout_height=“75dip”
android:layout_toLeftOf=“@+id/call_btn”
android:background=“@drawable/black_bg” />
<TextView
android:id=“@+id/time”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_toLeftOf=“@+id/fg”
android:textColor=“#ffffff” />
定义实体类:
/Contact_Demo/src/com/suntek/contact/model/CallLogBean.java
package com.suntek.contact.model;
/**
-
通话记录实体类
-
@author Administrator
*/
public class CallLogBean {
private int id;
private String name; // 名称
private String number; // 号码
private String date; // 日期
private int type; // 来电:1,拨出:2,未接:3
private int count; // 通话次数
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
/Contact_Demo/src/com/suntek/contact/adapter/DialAdapter.java
package com.suntek.contact.adapter;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.suntek.contact.R;
import com.suntek.contact.model.CallLogBean;
/**
-
电话记录适配器
-
@author Administrator
*/
public class DialAdapter extends BaseAdapter {
private Context ctx;
private List callLogs;
private LayoutInflater inflater;
public DialAdapter(Context context, List callLogs) {
this.ctx = context;
this.callLogs = callLogs;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return callLogs.size();
}
@Override
public Object getItem(int position) {
return callLogs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.contact_record_list_item,
null);
holder = new ViewHolder();
holder.call_type = (ImageView) convertView
.findViewById(R.id.call_type);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.number = (TextView) convertView.findViewById(R.id.number);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.call_btn = (TextView) convertView
.findViewById(R.id.call_btn);
convertView.setTag(holder); // 缓存
} else {
holder = (ViewHolder) convertView.getTag();
}
CallLogBean callLog = callLogs.get(position);
switch (callLog.getType()) {
case 1:
holder.call_type
.setBackgroundResource(R.drawable.ic_calllog_outgoing_nomal);
break;
case 2:
holder.call_type
.setBackgroundResource(R.drawable.ic_calllog_incomming_normal);
break;
case 3:
holder.call_type
.setBackgroundResource(R.drawable.ic_calllog_missed_normal);
break;
}
holder.name.setText(callLog.getName());
holder.number.setText(callLog.getNumber());
holder.time.setText(callLog.getDate());
addViewListener(holder.call_btn, callLog, position);
return convertView;
}
private static class ViewHolder {
ImageView call_type;
TextView name;
TextView number;
TextView time;
TextView call_btn;
}
private void addViewListener(View view, final CallLogBean callLog,
final int position) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Uri uri = Uri.parse(“tel:” + callLog.getNumber());
Intent intent = new Intent(Intent.ACTION_CALL, uri);
ctx.startActivity(intent);
}
});
}
}
/Contact_Demo/src/com/suntek/contact/ContactRecordListActivity.java
package com.suntek.contact;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.Activity;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结
现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。
我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。
Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。
如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。
(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。
我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。
Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。
如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。
(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)
[外链图片转存中…(img-2ipktgBv-1712243980911)]