如何拦截和更改从DB传递到ListView的数据?

时间:2015-05-06 07:03:02

标签: android database listview cursor adapter

在我的应用程序中,我从数据库中读取数据,将其放入游标并使用适配器将其传递给ListView。这些数据是从1到12的数字,但我需要它们在ListView中显示为月份的名称。如何以及在哪一步阅读和显示这些数据我可以截取它们并从数字变为文本?

3 个答案:

答案 0 :(得分:0)

您可以在适配器将文本设置为TextView之前修改数据。它将在适配器的getView方法中完成。

答案 1 :(得分:0)

试试这个

import java.text.DateFormatSymbols;
public String getMonth(int month) {
    return new DateFormatSymbols().getMonths()[month-1];
}

答案 2 :(得分:0)

您可以使用自定义适配器!如果您的数据是游标对象,您可以编写从" CursorAdapter"扩展的自定义适配器类。另外,你可以从" BaseAdapter"延伸。 叫它:

   ShowListCursorAdapter adapter = new ShowListCursorAdapter(getActivity(), R.layout.fragment_list_detail, cursor,
      columns, views, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    getListView().setAdapter(adapter);

在自定义适配器中扩展cursorAdapter: 构造:

 public ShowListCursorAdapter(Context context, int layout, Cursor cursor,  String[] columns, int[] views, int flag) {
      super(context,cursor,flag);
        mInflater =      (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 mCursor = cursor;
        mLayout = layout;
        mTo = views;
        mFrom = columns;
    }

在CursorAdapter中实现2个方法。

  @Override
    public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {//This will be called once
        mView = mInflater.inflate(mLayout, viewGroup, false);
        return mView;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {//This is called no.of row times
        for(int i = 0; i< mTo.length;i++) {//If you have single column no need of for loop
            TextView content = (TextView) view.findViewById(mTo[i]);
            content.setText(mCursor.getString(mCursor.getColumnIndex(mFrom[i])));////here you can convert number to month and display
        }
    }