簡體   English   中英

使用BaseAdapter的空白ListView

[英]Blank ListView with BaseAdapter

我正在嘗試使用BaseAdapter從數據庫填充我的列表。 Logcat不顯示任何錯誤。 這是我的代碼。

在這個DatabaseHelper類中,我有一個表STUDENTS

DatabaseHelper.java

public long saveData(Student std) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("NAME",std.name);
    cv.put("CITY",std.city);
    cv.put("AGE",std.age);
    long id = db.insert("STUDENTS", null, cv);
    db.close();
    return id;
}

public ArrayList<Student> getAllStudent() {
    ArrayList<Student> studentArrayList = new ArrayList<Student>();
    SQLiteDatabase db = getWritableDatabase();
    Cursor cursor = db.query("STUDENTS",null,null,null,null,null,null);
    Log.e("COUNT",""+cursor.getCount());

    while (cursor.moveToNext()) {
        Student s = new Student();
        s.name = cursor.getString(cursor.getColumnIndex("NAME"));
        s.city = cursor.getString(cursor.getColumnIndex("CITY"));
        s.age = cursor.getString(cursor.getColumnIndex("AGE"));
        studentArrayList.add(s);
    }
    db.close();
    return studentArrayList;
}

MyBaseAdapter.java

public class MyBaseAdapter extends BaseAdapter {

ArrayList<Student> myList = new ArrayList<Student>();
LayoutInflater inflater;
Context context;

public MyBaseAdapter(Context context,ArrayList<Student> myList) {
    this.myList = myList;
    this.context = context;
    inflater = LayoutInflater.from(this.context);
}

@Override
public int getCount() {
    return myList.size();
}

@Override
public Student getItem(int position) {
    return myList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    myViewHolder viewHolder;
    if(convertView == null){
        convertView = inflater.inflate(R.layout.single_row, null);
        viewHolder = new myViewHolder();
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (myViewHolder) convertView.getTag();
    }

    viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.nameTextView);
    viewHolder.cityTextView = (TextView) convertView.findViewById(R.id.cityTextView);
    viewHolder.ageTextView = (TextView) convertView.findViewById(R.id.ageTextView);

    viewHolder.nameTextView.setText(myList.get(position).name);
    viewHolder.cityTextView.setText(myList.get(position).city);
    viewHolder.ageTextView.setText(myList.get(position).age);
    return convertView;
}

public class myViewHolder {
    TextView nameTextView, cityTextView, ageTextView;
}
}

這是我的模特班

學生.java

public class Student {
 String name;
 String city;
 String age;
}

在我的MainActivity中,我試圖將數據填充到列表中。

MainActivity.java

public class MainActivity extends ActionBarActivity {

public EditText searchEditText;
public Button addButton;
public ListView studentListView;
public DatabaseHelper dbHelper;
public ArrayList<Student> arrayList;
public MyBaseAdapter myBaseAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    searchEditText = (EditText)findViewById(R.id.searchEditText);
    addButton = (Button)findViewById(R.id.addButton);
    studentListView = (ListView) findViewById(R.id.studentListView);

    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,AddNewStudent.class);
            startActivity(i);
        }
    });

    dbHelper = new DatabaseHelper(getApplicationContext());
    arrayList = dbHelper.getAllStudent();
    myBaseAdapter = new MyBaseAdapter(MainActivity.this,arrayList);
    studentListView.setAdapter(myBaseAdapter);
    myBaseAdapter.notifyDataSetChanged();
}
}

single_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:id="@+id/container">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/nameTextView" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/cityTextView" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/ageTextView" />
    </LinearLayout>

主要活動快照

我不知道哪里出了問題。

最后,我找到了答案。 您只需要在getView()方法中添加幾行代碼即可將列表中的值分配給模型類對象。

public View getView(int position, View convertView, ViewGroup parent) {

    Student std = new Student(); //this line I added
    std = myList.get(position);  //this line I added
    myViewHolder viewHolder;
    if(convertView == null){
        convertView = inflater.inflate(R.layout.single_row, null);
        viewHolder = new myViewHolder();
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (myViewHolder) convertView.getTag();
    }

    viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.nameTextView);
    viewHolder.cityTextView = (TextView) convertView.findViewById(R.id.cityTextView);
    viewHolder.ageTextView = (TextView) convertView.findViewById(R.id.ageTextView);

viewHolder.nameTextView.setText(myList.get(position).name);
viewHolder.cityTextView.setText(myList.get(position).city);
viewHolder.ageTextView.setText(myList.get(position).age);
return convertView;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM