【发布时间】:2017-02-19 04:11:10
【问题描述】:
我正在使用带有自定义列表适配器的列表视图。
当我点击“+”按钮时,会动态添加一个列表项。每个列表项包含 4 个 EditText。
第一个列表项显示正确的数据,但其他项最右边的 EditTexts 为空。
这是问题
您可以看到最后编辑文本显示除第一个列表项之外的空数据。显示键盘后此问题已解决。
打开软键盘后
我尝试使用adapter.notifyDataSetChanged() 和list.invalidateViews(),但现在可以了。
我该如何解决这个问题?
onCreate()
Vector v;
CreateExerciseAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_workout);
v = new
adapter = new CreateExerciseAdapter(v,this);
txtName = (EditText)findViewById(R.id.editTextName);
list = (ListView)findViewById(R.id.listView2);
//listview footer button (Add new button)
LayoutInflater inflater = LayoutInflater.from(this);
View inflate = inflater.inflate(R.layout.create_exercise_item, null);
ImageButton btnAddNew = (ImageButton) inflate.findViewById(R.id.imageButtonAddNew);
list.addFooterView(inflate);
btnAddNew.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View item = LayoutInflater.from(view.getContext())
.inflate(R.layout.create_new_exercise_item, null);
v.add(item);
adapter.notifyDataSetChanged();
}
});
list.setAdapter(adapter);
}
谢谢你:-)
更新
适配器
public class CreateWorkoutListAdapter extends BaseAdapter {
Context context;
Vector vector;
LayoutInflater inflater = null;
FontManager fm;
public CreateWorkoutListAdapter(Context context, Vector vector){
this.context = context;
this.vector = vector;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return vector.size();
}
@Override
public Object getItem(int position) {
return vector.elementAt(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
view = inflater.inflate(R.layout.create_new_exercise_item, null);
final EditText txtName = (EditText)view.findViewById(R.id.editTextExerciseName);
final EditText txtReps = (EditText)view.findViewById(R.id.editTextReps);
final EditText txtMin = (EditText)view.findViewById(R.id.editTextMin);
final EditText txtSec = (EditText)view.findViewById(R.id.editTextSecond);
return view;
}
}
【问题讨论】:
-
什么是“v”?请同时发布适配器代码。
-
@NIkaKurdadze:谢谢。我更新了问题
-
你能详细谈谈这个问题吗?添加的项目是否显示?您在“显示键盘后解决此问题”中的确切含义是什么?
-
@NikaKurdadze:我添加了截图。我认为现在问题很清楚了。
-
您是在代码中的某处设置 EditTexts 的文本,还是它们只是在 xml 中定义?
标签: android listview listadapter