首先声明下,这些只是核心代码,而且代码都是楼主在word里面直接写的,所以有错误的还请海涵。
今天是本屌完成的公司的第一个项目,具体项目不方便透露,大致就是做一些登陆支付页面给内部的一些游戏调用,历经一个月,其中碰到各种困难,其实现在总结起来就是如果我对android熟悉的话,那么我这个项目一个星期就绰绰有余了。总归还是要补android的基础知识啊,但是接下来就要接触ios了,也是蛋疼的很。好了,废话不多说,在这里总结下我项目中用到的一些技术与碰到的问题,以及如何解决与实现的。总结还是以代码为主,文字为辅。
1.首先来说下这个登陆界面,登陆界面的话我是采用的自定义的AlertDialog来实现的,关于如何实现这个AlertDialog的自定义布局,其实原理很简单,我这里简单介绍下:
(1)AlertDialog的自定义View布局,只需三步:
1.Viewview=LayoutInflater.from(context).inflate(R.layout.main,null);//获取你要加载的布局,R.layout.main是你的布局名。
2.AlertDialog dialog=newAlertDialog.Builder(context).setView(view).create();//加载你的布局到需要展示的AlertDialog中去。
3.dialog.show();//将AlertDialog展示到activity中去。
(2)然后说下用户名的输入框,我所采用的一些办法。他们给我的需求是首先你要能够将最后一次登陆成功的用户名自动填充到用户名的输入框中,这里我将那些注册成功的用户名和密码通过SharedPreference中去,这个知识点后面再讲,这里知道我的存储方式即可。然后通过给每个用户设置标志位即true或false来表示他们是否是最后一次登陆的,并将按先后顺序展示后面的用户名。我采用的方法是通过单击用户名边上的一个下拉按钮,然后弹出一个PopupWindow来显示这些用户名。
PopupWindow的建立也比较简单,只需要两步:
1. PopupWindow popup=newPopupWindow(listview,ll.getWidth(),LayoutParams.WRAP_CONTENT,ture);//这里的的话是先new一个popupwindow,然后后面的四个参数分别是:(1)是个ListView,用来填充PopupWindow(2)是PopupWindow的宽度,即width,你希望这个PopupWindow有多宽(3)是PopupWindow的高度,即你所希望的高度,这里我设置的是自适应。(4)这个参数我就不清楚了,大致意思应该就是前面说的对。
2. Popup.showAsDropDown(view.findViewById(R.id.username_edit));//括号里的表示想要在那个控件下面显示。
ListView的创建与接口回调:
Listviewlistview=new ListView(context)创建一个ListView
Listview.setAdapter(myArrayAdapter);//自定义了一个Adapter来填充这个ListView,Adapter的话里面的布局是自定义的,并且写了一个可以回调的接口,用于删除不想要的用户名。然后接口回调的用法是,首先你在你的adapter中定义一个接口,然后再写一个函数来初始化这个接口,再在你想要调用的接口的类中重载这个接口中的方法,最后在adapter中调用这个方法就可以了。具体的代码的话参见我的代码
//这个表示在这个类中重写接口函数
public classMainActivity extends Activity implements MyArrayAdapter.deleteItem{
private PopupWindow popup;
private ArrayList<String> array;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
array=new ArrayList<>();
findViewById(R.id.popup).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListView listView=newListView(MainActivity.this);
MyArrayAdaptermyArrayAdapter=new MyArrayAdapter(MainActivity.this,array);
listView.setAdapter(myArrayAdapter);
popup=newPopupWindow(listView,findViewById(R.id.popup).getWidth()
,ViewGroup.LayoutParams.WRAP_CONTENT,true);
}
});
}
@Override
public void delItem(int position) {
//这里填充需要重写的方法
}
}
//这个表示在自定义的Adapter
public classMyArrayAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> array;
private deleteItem delItem;
public MyArrayAdapter(Contextcontext,ArrayList<String> array){
this.context=context;
this.array=array;
}
@Override
public int getCount() {
return array.size();
}
@Override
public Object getItem(int position) {
return array.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position,View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.item,null);
holder=new ViewHolder();
holder.tv=(TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
holder.tv.setText(array.get(position));
holder.tv.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
delItem.delItem(position);
}
});
return convertView;
}
class ViewHolder{
TextView tv;
}
public void setInterface(deleteItemdelItem){
this.delItem=delItem;
}
public interface deleteItem{
public void delItem(int position);
}
}