Adapter接口
public interface Adapter {
void registerDataSetObserver(DataSetObserver observer);
void unregisterDataSetObserver(DataSetObserver observer);
int getCount();
Object getItem(int position);
long getItemId(int position);
View getView(int position, View convertView, ViewGroup parent);
static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE;
int getItemViewType(int position);
int getViewTypeCount();
static final int NO_SELECTION = Integer.MIN_VALUE;
boolean isEmpty();
}
BaseAdapter
因为要实现的方法过多,我们一般使用简单的封装类BaseAdapter
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter
只需要实现四个方法
ArrayAdapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1,
android.R.id.text1,
datas;
SimpleAdapter
ArrayList<HashMap <String, Object>> datas =new ArrayList<HashMap <String, Object>>() ;
for (int i = 0; i < 10; i++) {
HashMap <String, Object> itemData = new HashMap<String,Object>();
itemData.put("name","袜子"+(i+3));
itemData.put("age",i+3);
itemData.put("gender",i%2==0?"男":"女");
datas.add(itemData);
}
SimpleAdapter adapter = new SimpleAdapter(
this,
datas,
R.layout.lv_item_layout,
new String[]{"name","age","gender"},
new int[]{R.id.name,R.id.age,R.id.gender});
lv.setAdapter(adapter);
ExpandListView
1.xml中定义
<ExpandableListView
android:id="@+id/elv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
2.定义适配器
public class MyAdapter extends BaseExpandableListAdapter {
ArrayList<String> mInitGroupNames;
HashMap<String, ArrayList<String>> mChildrenData;
public ArrayList<String> getmInitGroupNames() {
return mInitGroupNames;
}
public HashMap<String, ArrayList<String>> getmChildrenData() {
return mChildrenData;
}
public MyAdapter(ArrayList<String> initGroupNames,
HashMap<String, ArrayList<String>> hashMap) {
mInitGroupNames = initGroupNames;
mChildrenData = hashMap;
}
@Override
public int getGroupCount() {
return mInitGroupNames.size();
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView tv = null;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(
android.R.layout.simple_list_item_1, parent, false);
tv = (TextView) convertView.findViewById(android.R.id.text1);
convertView.setTag(tv);
} else {
tv = (TextView) convertView.getTag();
}
String groupName = mInitGroupNames.get(groupPosition);
tv.setText(groupName);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
String groupName = mInitGroupNames.get(groupPosition);
ArrayList<String> childrenData = mChildrenData.get(groupName);
return childrenData.size();
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView tv = null;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(
android.R.layout.simple_list_item_1, parent, false);
tv = (TextView) convertView.findViewById(android.R.id.text1);
convertView.setTag(tv);
} else {
tv = (TextView) convertView.getTag();
}
String groupName = mInitGroupNames.get(groupPosition);
ArrayList<String> childrenData = mChildrenData.get(groupName);
String childName = childrenData.get(childPosition);
tv.setText(childName);
return convertView;
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
3.
ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv);
final MyAdapter dapter = new MyAdapter(initGroupNames(),
initChildrenData());
elv.setAdapter(dapter);
Dialog
public void click01(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("你确认要退出吗?");
builder.setPositiveButton("不走不走", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tip("不走不走");
}
});
builder.setNegativeButton("拜拜了您呐", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tip("拜拜了您呐");
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
public void click02(View v) {
new AlertDialog.Builder(this).setTitle("提示").setMessage("你确认要退出吗?")
.setPositiveButton("不走不走", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tip("不走不走");
}
}).setNegativeButton("拜拜了您呐", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tip("拜拜了您呐");
}
}).create().show();
}
String[] subjects = new String[]{"语文","数学","英语"};
int mTabIndex=1;
public void click03(View v) {
new AlertDialog.Builder(this)
.setTitle("请选择你最喜欢的学科")
.setSingleChoiceItems(subjects, mTabIndex, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mTabIndex=which;
}
})
.setPositiveButton("不走不走", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, subjects[mTabIndex], 0).show();
}
}).setNegativeButton("拜拜了您呐", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tip("拜拜了您呐");
}
}).create().show();
}
boolean[] flags = new boolean[]{false,true,true};
public void click04(View v) {
new AlertDialog.Builder(this)
.setTitle("请选择你最喜欢的学科")
.setMultiChoiceItems(subjects, flags, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
flags[which]=isChecked;
}
})
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String str = "";
for (int i = 0; i < flags.length; i++) {
if (flags[i]) {
str+=subjects[i]+" ";
}
}
Toast.makeText(MainActivity.this, str, 0).show();
}
})
.create()
.show();
}
public void click05(View v){
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("角色删除中,请等待...");
dialog.setTitle("尊敬的玩家");
dialog.show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
dialog.dismiss();
}
}, 3000);
}
// pop.showAsDropDown(anchor)
// pop.showAsDropDown(anchor, xoff, yoff)
// 要使它在正中间,就需要在外面再嵌套一个布局,再使用xoff去调整
// pop.showAtLocation(parent, gravity, x, y) 在指定位置展示
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn:
showPopupWindow()
break
case R.id.all_tv:
Toast.makeText(this, "第二个子选项", 0).show()
pop.dismiss()
break
}
}
PopupWindow pop
private void showPopupWindow() {
View contentView = LayoutInflater.from(
MainActivity.this).inflate(R.layout.pop_view, null)
contentView.findViewById(R.id.all_tv).setOnClickListener(this)
pop = new PopupWindow(contentView,
400,ViewGroup.LayoutParams.WRAP_CONTENT)
pop.setFocusable(true)
pop.setOutsideTouchable(true)
pop.setBackgroundDrawable(new BitmapDrawable())
pop.showAsDropDown(btn, 0, 0)
}
public void myclick(View v){
}
PopupWindow pop
private void showPopupWindow() {
View contentView = LayoutInflater.from(
MainActivity.this).inflate(R.layout.pop_view, null)
ListView lv =(ListView)contentView.findViewById(R.id.lv)
ArrayAdapter<String> adapter =new ArrayAdapter<String>(
this
,android.R.layout.simple_expandable_list_item_1
,android.R.id.text1
,new String[]{"全部","我的微博","周边","特别关注"})
lv.setAdapter(adapter)
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "onitemclick", 0).show()
}
})
pop=new PopupWindow(contentView,200,ViewGroup.LayoutParams.WRAP_CONTENT)
pop.setFocusable(true)
pop.setOutsideTouchable(true)
pop.setBackgroundDrawable(new BitmapDrawable())
pop.showAsDropDown(btn, 0, 0)
}
自定义AlertDialog
public class MyAdapter extends AlertDialog {
protected MyAdapter(Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_dialog_layout);
}
MyAdapter dialog = new MyAdapter(this);
dialog.show();
}
ListView添加头布局和脚布局
View headerView = LayoutInflater.from(this)
.inflate(R.layout.lv_header_layout, null)
lv.addHeaderView(headerView)
lv.addFooterView(headerView)
单元测试
public class MockCalcultorDao {
public int add(int x , int y){
return x+y;
}
}
public class CalcultorDaoTestCase extends AndroidTestCase {
public void testAdd(){
MockCalcultorDao dao = new MockCalcultorDao();
int actualResult =dao.add(3,5);
assertEquals(8,actualResult);
}
}
手机的存储结构
将某个文件转移到SD卡
public void startDownload(View v) {
try {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory(),
"葫芦娃.avi");
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024*1024];
for (int i = 0; i < 5; i++) {
fos.write(buffer);
}
fos.close();
Log.v("me", file.exists()+" ");
}
} catch (Exception e) {
}
}