如果你想使用一个复合布局的话,你就要使用含有id字段的构造函数了,这个id要去引用这个复杂布局文件 中的一个TextView,TextView被引用了,使用数组中的对象,调用toString方法,转换成字符串来填充这个TextView,你可以使 用包含自定义对象的数组或者集合。重写自定义对象的toString()方法,来保证ListView显示。
public ArrayAdapter (Context context, int resource, int textViewResourceId)
这个是用来复杂布局的,ListView的Item项的布局文件中不止含有一个TextView控件
resource: The resource ID for a layout file containing a layout to use when instantiating views. ListView中Item项的复杂布局xml文件
textViewResourceId:The id of the TextView within the layout resource to be populated(显示) ListView中Item项的复杂布局xml文件中用来显示ArrayAdapter中数据的那个TextView
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
public ArrayAdapter (Context context, int resource, int textViewResourceId, List objects)
//建议使用这个,直接给ArrayAdapter填充了数据。
方法:
这个方法能够使用数组xml文件中配置的数据来创建一个ArrayAdapter,这个数组中的内容如何获得,通过this.getResources().getTextArray(id)方法获得。
自定义数组xml文件的标识id号,也就是ArrayAdapter要绑定到ListVIew中的数据
textViewResourceId:用于显示数组数据的布局文件的id标识号(注意:该布局文件中只能有一个TextView,有多个就会报错,一般是 ClassCastException)
通过重写Adapter的getView方法来得到你想要的view。
你也可以是使用其他的一些非TextView 控件来显示数组中的数据,通过重写Adapter的getView方法来得到你想要的view。
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
public class mingxi_income_list extends AppCompatActivity {
private List<Map<String, String>> mStringList_income = new ArrayList<>();
private ListView income_ListView;
private SimpleCursorAdapter income_SimpleCursorAdapter;
private SQLiteDatabase db_income_list_write;
private SQLiteDatabase db_income_list_read;
private DateBase db_income_list;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mingxi_income_listview);
initView();
initEvent();
ImageView back=(ImageView)findViewById(R.id.back) ;
//返回上级
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(mingxi_income_list.this, function_menu.class);
startActivity(intent);
}
});
//长按删除item
income_ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long l) {
new AlertDialog.Builder(mingxi_income_list.this)
.setTitle("删除收入信息")
.setMessage("是否删除该项?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteData(position);
}
})
.setNegativeButton("取消", null)
.show();
return true;
}
});
}
private void initView() {
income_ListView = (ListView) findViewById(R.id.my_income_Listview);
}
private void initEvent() {
db_income_list = new DateBase(this);
db_income_list_write = db_income_list.getWritableDatabase();
db_income_list_read = db_income_list.getReadableDatabase();
income_SimpleCursorAdapter = new SimpleCursorAdapter(mingxi_income_list.this, R.layout.mingxi_income_list_item_style, null,
new String[]{"money", "time","type","fukuanren","beizhu"}, new int[]{R.id.mingxi_income_list_money_style, R.id.mingxi_income_list_time_style,R.id.mingxi_income_list_leixing_style,R.id.mingxi_income_list_fukuanren_style,R.id.mingxi_income_list_beizhu_style}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
income_ListView.setAdapter(income_SimpleCursorAdapter ); //给ListView设置适配器
refreshListview(); //刷新ListView
}
//刷新数据列表,常规查询所有收入
public void refreshListview() {
FileInputStream fis_now_name=null;
try {
fis_now_name=openFileInput("now_name");//用try、catch包围
try {
//用户名
byte[] readByte_name=new byte[fis_now_name.available()];//容易抛出异常,先确定字节的长度,存到数组
while (fis_now_name.read(readByte_name)!=-1){}
String now_name=new String(readByte_name);//得到当前登陆用户名
Cursor mCursor = db_income_list_write.rawQuery("select * from income where username=?", new String[]{now_name});
income_SimpleCursorAdapter .changeCursor(mCursor);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
//删
public void deleteData(int positon) {
Cursor mCursor = income_SimpleCursorAdapter .getCursor();
mCursor.moveToPosition(positon);
int itemId = mCursor.getInt(mCursor.getColumnIndex("_id"));
db_income_list_write.delete("income", "_id=?", new String[]{itemId + ""});
Toast.makeText(mingxi_income_list.this, "删除收入完成!", Toast.LENGTH_LONG).show();
refreshListview();
}
}