Android 向ListView添加项目

Android 向ListView添加项目,android,listview,android-listview,android-adapter,Android,Listview,Android Listview,Android Adapter,我试图通过单击按钮将项目添加到我的列表中。每个列表项都包含一个“TextView”,该值应设置为从EditText获取的值。第一个项目被正确添加,但是,当我向列表中添加另一个项目时,上一个列表项目的TextView被设置为新值。因此,结果是有两个(或无论添加多少个)相同的列表项 我可以在我的代码中看到为什么会发生这种情况,但我不知道如何更改它以使其正常工作 我正在为列表视图使用一个名为“TimetableListAdapter”的自定义适配器。要添加到每个列表项的数据来自“DialogFragm

我试图通过单击按钮将项目添加到我的列表中。每个列表项都包含一个“TextView”,该值应设置为从EditText获取的值。第一个项目被正确添加,但是,当我向列表中添加另一个项目时,上一个列表项目的
TextView
被设置为新值。因此,结果是有两个(或无论添加多少个)相同的列表项

我可以在我的代码中看到为什么会发生这种情况,但我不知道如何更改它以使其正常工作

我正在为
列表视图使用一个名为“TimetableListAdapter”的自定义适配器。要添加到每个列表项的数据来自“DialogFragment”(此处未显示,因为数据传递/传输工作正常)

公共类ScreenSlidePagerFragment扩展片段实现View.OnClickListener、AddLessonDialog.onSubmitListener{
视图组根视图;
按钮btn_添加课程;
ListView lv_viewDay;
TimetableListAdapter la_listAdapt;
字符串[]lessonData;
公共屏幕SlidePagerFragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
rootView=(视图组)充气器。充气(
R.layout.fragment_时间表_页面,容器,假);
btn_addlessue=(按钮)rootView.findviewbyd(R.id.btn_addlessue);
btn_addLesson.setOnClickListener(此);
lv_viewDay=(ListView)rootView.findviewbyd(R.id.lv_viewDay);
la_listAdapt=新的TimetableListAdapter(getActivity());
lv_viewDay.setAdapter(la_listAdapt);
返回rootView;
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.btn\U添加课程:
//显示输入数据的对话框片段
打破
}
}
公共类TimetableListAdapter扩展了BaseAdapter{
私有ArrayList mDayList;
语境;
公共TimetableListAdapter(上下文){
mContext=上下文;
mDayList=newarraylist();
}
@凌驾
public int getCount(){
返回mDayList.size();
}
@凌驾
公共对象getItem(int位置){
返回mDayList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(null==convertView){
convertView=LayoutFlater.from(mContext)。充气(
R.layout.lesson_项,空);
}
TextView tv_subjectField=(TextView)convertView.findViewById(R.id.tv_subjectField);
tv_subjectField.setText(lessonData[0]);
返回视图;
}
公共课(整数位置、字符串主题、字符串教师、字符串教室、字符串句点){
lessonData=新字符串[4];
lessonData[0]=主题;
mDayList.add(位置、lessonData);
notifyDataSetChanged();
}
}
@凌驾
public void setOnSubmitListener(视图v、字符串主题、字符串教师、字符串室、字符串句点、int位置){
开关(v.getId()){
case R.id.btn_setLesson://这是DialogFragment上的一个按钮
//数据从DialogFragment fine传递
la_listAdapt.addLesson(位置、主题、教师、房间、时段);
打破
}
}
}

从我的代码中可以看到,我试图将列表项中的数据设置为DialogFragment中传递的数据,DialogFragment存储在
String[]
中的
addLesson()

在适配器的
getView
方法中,替换:

tv_subjectField.setText(lessonData[0]);
与:


mDayList.add(位置,lessonData)。为什么需要位置参数?为什么不直接添加()?@greenapps我可能想在列表中的其他位置添加一个项目,而不是总是在顶部或底部。这应该(我想)允许我在任何我想要的位置添加一个项目。我确实删除了它,看看它是否产生了影响,但没有。这并没有将TextView设置为我想要的lessonData中的值。和
mDayList.getPosition()
不是字符串。那么为什么不告诉它是字符串数组呢
tv_subjectField.setText(mDayList.get(position)[0])谢谢@我应该检查一下。
tv_subjectField.setText(lessonData[0]);
tv_subjectField.setText(mDayList.get(position));