我已经得到了我逼疯了一个奇怪的问题。 在我的Android应用程序,我定制我自己的适配器,从ArrayAdapter延伸。 ListView中的项目,我将我的适配器可以被标记文本(不可编辑),可编辑的文本或微调。 疯狂的东西是:当我滚动ListView中,有两个问题:
(1)在所说的纺丝器的项目中示出的(所选择的) 值有时会发生变化 ,虽然我只滚动!! 当我点击微调,老选定值仍显示(一,应由微调显示)(2)的ListViewItems 变化的顺序 ,当我滚动!
=>但在适配器中的数据不改变 (无论是数据本身也不量级) -因此它必须是视图本身的问题? 在后台,也许安卓缓存和不刷新ListViewItems很快或某事像那?
任何人可以帮助我吗?
多谢!
好吧,我已经找到了解决方案,它是不是很漂亮,但它的工作原理。 我根本就没有用了convertView虽然,关于内存和性能是次优的。 在我的情况下,它应该是OK的,因为我的ListView的最大项目金额15.这是我的适配器级:
public class FinAdapter extends ArrayAdapter<Param>{
public Param[] params;
private boolean merkzettel;
protected EditText pv;
public FinAdapter(Context context, int textViewResourceId, Param[] items, boolean merkzettel) {
super(context, textViewResourceId, items);
this.params = items;
this.merkzettel = merkzettel;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Param p = params[position];
if(p != null){
if(merkzettel){
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.merk_det_item, null);
}
TextView tvl = (TextView) convertView.findViewById(R.id.paramM);
TextView edl = (TextView) convertView.findViewById(R.id.param_valueM);
TextView pal = (TextView) convertView.findViewById(R.id.param_unitM);
if (tvl != null) {
tvl.setText(p.getName());
}
if(pal != null){
pal.setText(p.getUnit());
}
if(edl != null){
edl.setText(p.getDefData());
}
}
else{
if(p.isSelect()){
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.fin_prod_list_item_select, null);
}
TextView tvs = (TextView) convertView.findViewById(R.id.paramS);
Spinner sp = (Spinner) convertView.findViewById(R.id.spinner_kalk);
TextView paU = (TextView) convertView.findViewById(R.id.param_unitS);
if (tvs != null) {
tvs.setText(p.getName());
}
if(paU != null){
paU.setText(p.getUnit());
}
if(sp != null){
String[] values = new String[p.getData().size()];
for(int i=0; i<values.length; i++){
values[i] = p.getData().get(i);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getContext(), android.R.layout.simple_spinner_item, values);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(adapter);
sp.setSelection(p.getData().indexOf(p.getDefData()));
sp.setOnItemSelectedListener(new OnItemSelectedListener(){
public void onItemSelected(AdapterView<?> parent,
View convertView, int pos, long id) {
p.setDefData(p.getData().get(pos));
p.setChanged(true);
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
}
else if(p.isEdit()){
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.fin_prod_list_item_edit, null);
}
TextView pa = (TextView) convertView.findViewById(R.id.param);
pv = (EditText) convertView.findViewById(R.id.param_value);
TextView paE = (TextView) convertView.findViewById(R.id.param_unit);
if (pa != null) {
pa.setText(p.getName());
}
if(paE != null){
paE.setText(p.getUnit());
}
if(pv != null){
pv.setText(p.getDefData());
pv.setOnEditorActionListener(new OnEditorActionListener(){
public boolean onEditorAction(TextView convertView, int actionId,
KeyEvent event) {
// TODO Auto-generated method stub
p.setDefData(pv.getText().toString());
p.setChanged(true);
return false;
}
});
}
}
else if(p.isLabel()){
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.fin_prod_list_item_label, null);
}
TextView tvl = (TextView) convertView.findViewById(R.id.paramL);
TextView edl = (TextView) convertView.findViewById(R.id.param_valueL);
TextView pal = (TextView) convertView.findViewById(R.id.param_unitL);
if (tvl != null) {
tvl.setText(p.getName());
}
if(pal != null){
pal.setText(p.getUnit());
}
if(edl != null){
edl.setText(p.getDefData());
}
}}
}
return convertView;
}
}