그래서 ListView 및 해당 사용자 지정 어댑터가 있습니다 데이터베이스에 값을 추가하고 목록을 다시 채우십시오. 그래서 다음과 같은 방법으로 항목을 추가했습니다 : q, w, e, r , t는, Y는 유 난, O, P 같이 채워진리스트 뷰는 다음과 같다 (Q)은, E, R, T, Y, Q, Q, QListView 첫 번째 항목을 여러 번 추가
, 승 이것은 커스텀 어댑터
public class TestListAdapter extends BaseAdapter {
private static ArrayList<FlashCard> flashCardItems;
private LayoutInflater mInflater;
private Context context;
public TestListAdapter(Context context, ArrayList<FlashCard> results) {
this.context = context;
flashCardItems = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return flashCardItems.size();
}
public Object getItem(int position) {
return flashCardItems.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.flashcard, null);
holder = new ViewHolder();
holder.flipper = (ViewFlipper) convertView.findViewById(R.id.flashcard);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.flipper.addView(FlashCard.createQuestionCard(context,flashCardItems.get(position).getQuestion()));
return convertView;
}
static class ViewHolder {
ViewFlipper flipper;
}
}
인
이것은 데이터베이스 처리기입니다.
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "mySchoolDB";
// Flashcards table name
private static final String TABLE_FLASHCARDS = "flashcards";
// Flashcards Table Columns names
private static final String KEY_ID = "id";
private static final String QUESTION = "question";
private static final String ANSWER = "answer";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_FLASHCARDS_TABLE = "CREATE TABLE " + TABLE_FLASHCARDS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + QUESTION + " TEXT,"
+ ANSWER + " TEXT" + ")";
db.execSQL(CREATE_FLASHCARDS_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_FLASHCARDS);
// Create tables again
onCreate(db);
}
/**
* All CRUD(Create, Read, Update, Delete) Operations
*/
// Adding new Flashcard
public void addFlashcard(FlashCard flashcard) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(QUESTION, flashcard.getQuestion()); // flashcard Name
values.put(ANSWER, flashcard.getAnswer()); // flashcard Phone
// Inserting Row
db.insert(TABLE_FLASHCARDS, null, values);
db.close(); // Closing database connection
}
// Getting single FlashCard
public FlashCard getFlashcard(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_FLASHCARDS, new String[] { KEY_ID,
QUESTION, ANSWER }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
FlashCard flashcard= new FlashCard(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
cursor.close();
db.close();
// return FlashCard
return flashcard;
}
// Getting All Flashcards
public ArrayList<FlashCard> getAllFlashcards() {
ArrayList<FlashCard> FlashcardList = new ArrayList<FlashCard>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_FLASHCARDS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
FlashCard flashcard = new FlashCard(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2));
// Adding Flashcard to list
FlashcardList.add(flashcard);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
// return Flashcard list
return FlashcardList;
}
// Updating single Flashcard
public int updateFlashcard(FlashCard flashcard) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(QUESTION, flashcard.getQuestion());
values.put(ANSWER, flashcard.getAnswer());
db.close();
// updating row
return db.update(TABLE_FLASHCARDS, values, KEY_ID + " = ?",
new String[] { String.valueOf(flashcard.getID()) });
}
// Deleting single Flashcard
public void deleteFlashcard(FlashCard flashcard) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_FLASHCARDS, KEY_ID + " = ?",
new String[] { String.valueOf(flashcard.getID()) });
db.close();
}
// Getting Flashcards Count
public int getFlashcardsCount() {
String countQuery = "SELECT * FROM " + TABLE_FLASHCARDS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
public void deleteAllFlashCards(){
SQLiteDatabase sdb= this.getWritableDatabase();
sdb.delete(TABLE_FLASHCARDS, null, null);
sdb.close();
}
}
는 이것은
public class TestList extends ListView
{
private Context context;
private ArrayList<FlashCard> stringArray = new ArrayList<FlashCard>();
public TestList(Context context) {
super(context);
this.context = context;
setResults();
}
public void setResults() {
DatabaseHandler db = new DatabaseHandler(context);
stringArray = db.getAllFlashcards();
setAdapter(new TestListAdapter(context, stringArray));
}
public TestList(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void addFlashCardDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Add flashcard");
final EditText question = new EditText(context);
question.setHint("Question");
final EditText answer = new EditText(context);
answer.setHint("Answer");
LinearLayout qa = new LinearLayout(context);
qa.setOrientation(LinearLayout.VERTICAL);
qa.addView(question);
qa.addView(answer);
builder.setView(qa);
builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
FlashCard f = new FlashCard(question.getText().toString(), answer.getText().toString());
DatabaseHandler db = new DatabaseHandler(context);
db.addFlashcard(f);
setResults();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
}
도움이되었지만 한 항목을 클릭 할 때 해당 항목과 임의의 항목이 뒤집혀서 listview의 마지막 몇 항목을 클릭하면 널 포인트 예외가 발생합니다. 내 onitemclick에서이 일을하고있다 LinearLayout ll = (LinearLayout) av.getChildAt (i); \t \t ViewFlipper vf = (ViewFlipper) ll.getChildAt (0); 그 라인은 nullpointer를 던지고 있습니다. 그러나 마지막 몇 분 동안 만 –
나는'av'가 당신의 목록보기라고 생각하고있다. 그러나 나는 당신이 클릭 한보기를 원한다면 어쨌든 알고있다. 그러면 onItemClick 메소드에 전달 된'view' 매개 변수를 사용한다. – Eluvatar
나는 그것을 뒤로 가져 간다. 당신의 해결책은 도움이되지 않았다. (그것도 똑같은 일을한다. –