首先自定义出自己的适配器,适配器是继承baseadapter,需要重写其的几个重要方法,
显示效果是在getview方法中实现的,要显示多种的view,就需要在加载多种布局文件的,
getCount()是设置显示多少条view的,一般设置设置成你要显示的数组的大小。
代码如下:
public class Adapter extends BaseAdapter {
private ArrayList<HashMap<String, Object>> data=null;
private LayoutInflater inflater = null;
public Adapter(Context context,ArrayList<HashMap<String, Object>> da) {
super();
this.data=da;
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolderDept deptHolder = null;
ViewHolderUser userHolder = null;
int type = getItemViewType(position);
if (null == convertView) {
switch (type) {
case 0:
convertView = inflater.inflate(
R.layout.test_layout, null);
deptHolder = new ViewHolderDept();
deptHolder.userName = (TextView) convertView
.findViewById(R.id.test_textView);
convertView.setTag(deptHolder);
break;
case 1:
convertView = inflater.inflate(
R.layout.test_image_layout, null);
userHolder = new ViewHolderUser();
userHolder.userName = (ImageView) convertView
.findViewById(R.id.test_imageView);
convertView.setTag(userHolder);
break;
}
} else {
switch (type) {
case 0:
deptHolder = (ViewHolderDept) convertView.getTag();
break;
case 1:
userHolder = (ViewHolderUser) convertView.getTag();
break;
}
}
HashMap<String, Object> map = data.get(position);
switch (type) {
case 0:
deptHolder.userName.setText(map.get("name").toString());
deptHolder.userName.setTextSize(20);
break;
case 1:
userHolder.userName
.setImageResource(R.drawable.adj);
// convertView.setBackgroundColor(Color.rgb(238, 238, 238));
}
return convertView;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return (Integer) data.get(position).get("type");
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
private class ViewHolderDept {
TextView userName;
}
private class ViewHolderUser {
ImageView userName;
}
下面是使用自己的自定义的适配器去填充listview
package com.example.administrator.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import com.example.administrator.wlb1.R;
import java.util.ArrayList;
import java.util.HashMap;
public class TESTActivity extends AppCompatActivity {
private ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
TextView tv;
ListView listview;
Adapter mAdapter;
EditText test_et;
Button test_ib;
Button test_bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
initdata();
initWidget();
setOnClick();
}
/初始化数据,以便填充listview,listview与Adapter显示联系枢纽就是data,就是一起应用data的数据
private void initdata(){
HashMap<String, Object> testdata;
for(int i=0;i<200;i++)
{ int type;
testdata=new HashMap<String, Object>();
if(i%2==0)
{
type=1;
testdata.put("type",type);
}
else{
type=0;
testdata.put("type",type);
}
testdata.put("name","聊天的内容"+i);
data.add(testdata);
}
}
private void initWidget(){
tv= (TextView)findViewById(R.id.textView);
tv.setText("聊天界面");
test_et=(EditText)findViewById(R.id.test_et) ;
test_bt=(Button)findViewById(R.id.test_bt);
test_ib=(Button) findViewById(R.id.test_ib);
listview= (ListView)findViewById(R.id.listView);
mAdapter = new Adapter(this,data);
listview.setAdapter(mAdapter);
listview.setSelection(listview.getAdapter().getCount()-1);
}
private void setOnClick(){
test_ib.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HashMap<String, Object> testdata;
testdata=new HashMap<String, Object>();
testdata.put("name",test_et.getText().toString());
test_et.setText("");
int type;
type=0;
testdata.put("type",type);
data.add(testdata);
mAdapter.notifyDataSetChanged();
listview.setSelection(listview.getAdapter().getCount()-1);
}
});
test_bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HashMap<String, Object> testdata;
testdata=new HashMap<String, Object>();
testdata.put("name","图片");
int type;
type=1;
testdata.put("type",type);
data.add(testdata);
mAdapter.notifyDataSetChanged();
listview.setSelection(listview.getAdapter().getCount()-1);
}
});
}
}
其中重要的是
listview= (ListView)findViewById(R.id.listView);
mAdapter = new Adapter(this,data);
listview.setAdapter(mAdapter);
//设置显示listview充最底下显示数据
listview.setSelection(listview.getAdapter().getCount()-1);