使用BaseAdapter的空白ListView(Blank ListView with BaseAdapter)

编程入门 行业动态 更新时间:2024-10-27 12:34:49
使用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; } }

这是我的模特课

Student.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>

我不知道哪里出错了。

I am trying to fill my list from database using BaseAdapter. Logcat don't show any error. Here is my code.

In this DatabaseHelper class, I have one table 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; } }

This is my model class

Student.java

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

and in my MainActivity I am trying to fill data into list.

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>

I don't know where I went wrong.

最满意答案

最后,我找到了答案。 你只需要在getView()方法中添加几行来将list中的值赋给模型类对象。

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; }

Finally, I have found the answer for this. You just need to add couple of line in getView() method to assign value from list to model class object.

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; }

更多推荐

本文发布于:2023-07-26 18:27:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1279323.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:空白   BaseAdapter   Blank   ListView

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!