필드의 값을 listView에 표시하기 전에 변경하고 싶습니다.안드로이드에서 ListView로 보내기 전에 데이터를 변경하는 방법
는 여기에 내가 변경을 수행하기 위해 원하는 코드의 부분 : 변경하지 않은 목록보기에 표시
@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;
}
데이터, 그것은 여전히 '1423300445'과 유사 이전의 타임 스탬프 형식을 보여줍니다.
밀리 초, DT : 1423300445000 서식 DT : 2월 07,2015 4시 14분
내가 목록보기로 보내기 전에 데이터를 변경하려면 어떻게해야합니까?
감사합니다.
== 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 == 이것은 내 목록보기
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();
}
== 그래서 @DerGolem의 조언에 따라 쿼리를 편집하려고 EDIT4 == 채워 방법입니다,하지만 난 좀 해요 커서 변수 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