Я хотел изменить значение поля перед его отображением в спискеView.Как изменить данные перед отправкой в ListView на Android
Вот часть кода, где я хотел, чтобы выполнить изменения:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.messagemenu_row_layout, parent, false);
int nameCol = c.getColumnIndex(MessageMenuDBHandler.COLUMN_NAME_DT);
Long millis = c.getLong(nameCol);
millis = millis * 1000;
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
Date resultdate = new Date(millis);
String fdt = sdf.format(resultdate);
Log.i(TAG, "Formatted DT: " + fdt);
TextView textView_DT = (TextView) v.findViewById(R.id.list_dt);
textView_DT.setText("test" + fdt);
return v;
}
данные, отображаемые на ListView не изменился, он по-прежнему показывает старый формат временной метки, который похож на «1423300445».
Миллис DT: 1423300445000 форматированном DT: Фев 07,2015 04:14
Что я должен сделать, чтобы изменить данные перед отправкой его в ListView?
Спасибо!
== EDIT1 == часть, где я вставить запись:
public void onClick_addRecord(View V){
///// Add to MessageMenuDB /////
// Prepare database
MessageMenuDBHandler dbHandler = new MessageMenuDBHandler(context, null, null, 1);
Long tsLong = System.currentTimeMillis()/1000;
int ts = Integer.parseInt(tsLong.toString());
String msg = "Sample messsage";
String type = "Type";
String dest = "Dest";
String from = "From";
Log.i(TAG, "ts: " + String.valueOf(ts));
//(int dt, String message, String type, String dest, String from, int seen, int sent, int mo)
MessageMenu messageMenu = new MessageMenu(
ts, msg, type, dest, from, 0, 0, 0
);
dbHandler.addMessage(messageMenu);
generateMessageList();
}
== EDIT2 == базы данных вызывает
public class MessageMenuDBHandler extends SQLiteOpenHelper {
public static final String TAG = "DBHandler";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "MessageMenuDB.db";
public static final String TABLE_NAME = "messages";
public static final String COLUMN_NAME_ID = "_id";
public static final String COLUMN_NAME_DT = "dt";
public static final String COLUMN_NAME_MESSAGE = "message";
public static final String COLUMN_NAME_TYPE = "type";
public static final String COLUMN_NAME_DEST = "dest";
public static final String COLUMN_NAME_FROM = "frm";
public static final String COLUMN_NAME_SEEN = "seen"; // 2-way, Seen by us or by recipient, 0 or 1
public static final String COLUMN_NAME_SENT = "sent"; // message sent to server, 0 or 1
public static final String COLUMN_NAME_MO = "mo"; // Message Originating, 1 if message was made by us
public MessageMenuDBHandler(Context context, String name,
SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " +
TABLE_NAME + "("
+ COLUMN_NAME_ID + " INTEGER PRIMARY KEY,"
+ COLUMN_NAME_DT + " INTEGER,"
+ COLUMN_NAME_MESSAGE + " TEXT,"
+ COLUMN_NAME_TYPE + " TEXT,"
+ COLUMN_NAME_DEST + " TEXT,"
+ COLUMN_NAME_FROM + " TEXT,"
+ COLUMN_NAME_SEEN + " INTEGER,"
+ COLUMN_NAME_SENT + " INTEGER,"
+ COLUMN_NAME_MO + " INTEGER" + ")";
db.execSQL(CREATE_PRODUCTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void addMessage(MessageMenu messageMenu) {
ContentValues values = new ContentValues();
values.put(COLUMN_NAME_DT, messageMenu.getDT());
values.put(COLUMN_NAME_MESSAGE, messageMenu.getMessage());
values.put(COLUMN_NAME_TYPE, messageMenu.getType());
values.put(COLUMN_NAME_DEST, messageMenu.getDest());
values.put(COLUMN_NAME_FROM, messageMenu.getFrom());
values.put(COLUMN_NAME_SEEN, messageMenu.getSeen());
values.put(COLUMN_NAME_SENT, messageMenu.getSent());
values.put(COLUMN_NAME_MO, messageMenu.getMO());
Log.i(TAG, "dt: " + messageMenu.getDT());
Log.i(TAG, "msg: " + messageMenu.getMessage());
Log.i(TAG, "type: " + messageMenu.getType());
Log.i(TAG, "dest: " + messageMenu.getDest());
Log.i(TAG, "from: " + messageMenu.getFrom());
Log.i(TAG, "seen: " + messageMenu.getSeen());
Log.i(TAG, "sent: " + messageMenu.getSent());
Log.i(TAG, "mo: " + messageMenu.getMO());
SQLiteDatabase db = this.getWritableDatabase();
db.insert(TABLE_NAME, null, values);
db.close();
}
public boolean deleteMessage(int id) {
boolean result = false;
String query = "Select * FROM " + TABLE_NAME + " WHERE " + COLUMN_NAME_ID + " = " + id + "";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
MessageMenu messageMenu = new MessageMenu();
if (cursor.moveToFirst()) {
messageMenu.setID(Integer.parseInt(cursor.getString(0)));
db.delete(TABLE_NAME, COLUMN_NAME_ID + " = ?",
new String[] { String.valueOf(messageMenu.getID()) });
cursor.close();
result = true;
}
db.close();
return result;
}
public Cursor query(String tableName, String orderedBy) {
String[] projection = {COLUMN_NAME_ID, COLUMN_NAME_DT, COLUMN_NAME_MESSAGE,
COLUMN_NAME_TYPE, COLUMN_NAME_DEST, COLUMN_NAME_FROM,
COLUMN_NAME_SEEN, COLUMN_NAME_SENT, COLUMN_NAME_MO};
//String[] projection = {COLUMN_NAME_PRODCODE, COLUMN_NAME_DETAIL};
Cursor c = getReadableDatabase().query(tableName, projection, null, null, null, null, orderedBy);
//getReadableDatabase().close();
return c;
}
}
Но я вроде хотел изменить данные перед он отображается, а не до его сохранения, поскольку в моем фактическом приложении данные уже есть, сохранены, и мне не разрешено изменять это, я могу только изменить способ отображения данных.
== EDIT3 == Это, как я заселена мой ListView
private void generateMessageList(){
MessageMenuDBHandler dbHandler = new MessageMenuDBHandler(context, null, null, 1);
Cursor c = dbHandler.query(MessageMenuDBHandler.TABLE_NAME,
MessageMenuDBHandler.COLUMN_NAME_ID + " DESC");
String[] from = new String[]{MessageMenuDBHandler.COLUMN_NAME_FROM,
MessageMenuDBHandler.COLUMN_NAME_MESSAGE,
MessageMenuDBHandler.COLUMN_NAME_DT};
int[] to = {
R.id.list_from,
R.id.list_msg,
R.id.list_dt
};
MessageMenuAdapter mySimpleCursorAdapter = new MessageMenuAdapter(
this,
//android.R.layout.simple_list_item_1,
R.layout.messagemenu_row_layout,
c,
from,
to,
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(mySimpleCursorAdapter);
listItemClickListener();
}
== EDIT4 == Так что я попытался изменить запрос в соответствии с рекомендациями @DerGolem, но я немного потерянный на том, как вернуть новое значение обратно в переменную курсора c. Пытался посмотреть на завершение кода. C. чтобы узнать, можно ли что-то использовать, но все, что я вижу, в основном получаю ... функции. Любой намек был бы весьма признателен.
public Cursor query(String tableName, String orderedBy) {
String[] projection = {COLUMN_NAME_ID, COLUMN_NAME_DT, COLUMN_NAME_MESSAGE,
COLUMN_NAME_TYPE, COLUMN_NAME_DEST, COLUMN_NAME_FROM,
COLUMN_NAME_SEEN, COLUMN_NAME_SENT, COLUMN_NAME_MO};
//String[] projection = {COLUMN_NAME_PRODCODE, COLUMN_NAME_DETAIL};
Cursor c = getReadableDatabase().query(tableName, projection, null, null, null, null, orderedBy);
//getReadableDatabase().close();
int nameCol = c.getColumnIndex(MessageMenuDBHandler.COLUMN_NAME_DT);
Long millis = c.getLong(nameCol);
millis = millis * 1000;
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
Date resultdate = new Date(millis);
String fdt = sdf.format(resultdate);
/* now how am I supposed to get the value of fdt back to that c? xD */
return c;
}
Спасибо, что посмотрели мой код @DerGolem, я ценю помощь – Sophia
извините за беспорядок на моих кодах, я все еще пытаюсь выяснить, как правильно отображать мои коды. – Sophia
Спасибо за ваше терпение @DerGolem, позвольте мне выразить эту часть кода. – Sophia