Android适配器

这篇博客详细介绍了Android中ListView与ArrayAdapter的使用,包括如何使用ArrayAdapter的构造函数来设置复杂布局,以及如何通过重写getView方法自定义ListView的显示。博客还展示了如何从SQLite数据库获取数据并填充到ListView,以及如何处理ListView的长按删除操作。
摘要由CSDN通过智能技术生成

如果你想使用一个复合布局的话,你就要使用含有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();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值