我的listView出现问题,并从中正确检索项目。 我的应用程序是一个管理员应用程序,允许教师为特定学生添加课程笔记。我的方案如下:
当教师向列表中添加新课程备注时,它会自动为其提供唯一ID
所以学生1(身份1)有带有ID的课程笔记:1,3,4,5和6
学生2(身份2)有带有ID的课程笔记:2,7,8和9
学生1的列表视图为:1,2,3,4,5
学生2的列表视图为:1,2,3,4,5
因此,当学生1访问注释1时,查询如下:select * from table_lessons其中lessonID = 1且StudentID = 1
注2:从table_lessons中选择*,其中lessonID = 2且StudentID = 1
注3:从table_lessons中选择*,其中lessonID = 3且StudentID = 1
依旧......
但是你看到学生1没有课程记录'2' - 所以程序崩溃了
我认为listView的位置正在抛弃该程序......
这是我的lessonNotesList类:(更新)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lesson_notes_list);
Button backToMain = (Button)findViewById(R.id.backToMain);
backToMain.setOnClickListener(this);
Bundle extras = getIntent().getExtras();
dyslexiaDb = new DBHelper(this);
ArrayList array_list = dyslexiaDb.getAllStudents();
//Creating an ArrayList of contacts data
//ArrayAdapter arrayAdapter = new ArrayAdapter(this,R.layout.list_layout, array_list);
LessonAdapter adapter = new LessonAdapter(array_list);
ListView listView = new ListView(this);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
// the id parameter returns the adapter's getItemId method
//intent.putExtra("lesson_id", id);
}
});
}
LessonAdapter类:
public class LessonAdapter extends BaseAdapter{
private ArrayList<LessonNotesData> lessonNotes;
public LessonAdapter(ArrayList<LessonNotesData> lessonNotes) {
this.lessonNotes = lessonNotes;
}
@Override
public int getCount(){
// get the number of lessons stored in the array
return lessonNotes.size();
}
@Override
public LessonNotesData getItem(int item){
// return the lesson object
return lessonNotes.get(item);
}
@Override
public long getItemId(int item){
// return the lessonNotes id
return getItem(item).getLessonID();
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// inflate the layout item you want to use
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_lesson_notes_list, viewGroup, false);
//((TextView) view.findViewById(R.id.listViewMain)).setText(getItem(i).getDate());
return view;
}
}
activity_lesson_notes_list.xml
<Button
android:id="@+id/backToMain"
android:layout_width="185dp"
android:layout_height="wrap_content"
android:text="@string/backBtn"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:id="@+id/AddNew"
android:layout_width="188dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Add New" />
<ListView
android:id="@+id/listViewMain"
android:layout_width="match_parent"
android:layout_height="685dp"
android:layout_below="@+id/AddNew"
android:layout_alignRight="@+id/backToMain"
android:layout_alignEnd="@+id/backToMain">
</ListView>
由于
答案 0 :(得分:1)
我假设您正在为课程使用对象,因此我创建了一个模拟课程,将课程对象作为示例。以下是一些代码片段,可以让您走上正确的轨道。如果您有更多问题,请随时提出。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LessonAdapter adapter = new LessonAdapter(getStudentsLessons());
ListView listView = new ListView(this);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
// the id parameter returns the adapter's getItemId method
intent.putExtra("lesson_id", id);
}
});
}
public class LessonAdapter extends BaseAdapter {
private ArrayList<Lesson> lessons;
public LessonAdapter(ArrayList<Lesson> lessons) {
this.lessons = lessons;
}
@Override
public int getCount() {
// get the number of lessons
return lessons.size();
}
@Override
public Lesson getItem(int i) {
// return the lesson object
return lessons.get(i);
}
@Override
public long getItemId(int i) {
// return the lesson's id
return getItem(i).getId();
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// inflate the layout item you want to use
// below is using the build in simple list item, but you can sub in a custom one if you want
view = LayoutInflater.from(viewGroup.getContext()).inflate(android.R.layout.simple_list_item_1, viewGroup, false);
((TextView) view.findViewById(android.R.id.text1)).setText(getItem(i).getName());
return view;
}
}
public class Lesson {
private int id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
}
答案 1 :(得分:0)
您的问题不在于ListView
,而在dyslexiaDb.getAllLessonNotes(studentID)
显示该课程尚未分配给学生2
的情况下,1
会返回getAllLessonNotes()
。
理想情况下,SELECT * FROM table_lessons WHERE StudentID = 1
中的SQL应该像
List
会返回Lesson
个自定义ArrayAdapter
个对象,如果您恰当地覆盖Lesson#toString()
,这些对象仍然可以与普通 select * from table_lessons where lessonID = 2 and StudentID = 1
一起使用。
这也有助于避免进行第二次数据库调用以使用
检索所有课程详细信息Lesson
因为您可以通过Intent
直接将{{1}}对象传递到您的详细活动。