我注意到我的应用上有一个带有三个EditTexts的ListView的外部行为, 问题是,每当我选择一个textedit并远离焦点并返回我在第一行写的文本时,我选择了desapears或移动到另一行,同时当一个edittext聚焦时,我在列表中下来似乎我已经在相同的位置选择了edittext,但是在我实际聚焦的那一个之后的10或11行(我可以写的那个)。
有关该案件的任何知识?
也是我对Android的新手,所以我不知道那是不是应该发生。 这是List im using。
public class In_List {
private int id;
private String text;
private float a;
private float Qty;
public In_List (int id, String text, float a, float Qty) {
this.id = id;
this.text = text;
this.a = a;
this.Qty= Qty;
}
public String get_text() {
return text;
}
public float get_a() {
return a;
}
public int get_id() {
return id;
}
public float get_Qty() {
return Qty;
}
}
这是适配器:
public abstract class List_Adapter extends BaseAdapter {
private ArrayList<?> ins;
private int R_layout_IdView;
private Context context;
public Lista_adaptador(Context context, int R_layout_IdView, ArrayList<?> ins) {
super();
this.context = context;
this.ins = ins;
this.R_layout_IdView = R_layout_IdView;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R_layout_IdView, null);
}
onInsert (ins.get(position), view);
return view;
}
@Override
public int getCount() {
return ins.size();
}
@Override
public Object getItem(int position) {
return ins.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public abstract void onInsert (Object insert, View view);
}
这是主要的活动。它有一个弹出窗口,我用来填充数量的值,但我没有包含它。
public class MainActivity extends Activity {
private ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listing);
ArrayList<In_List> data = new ArrayList<>();
for(int i=0; i<100; i++){
data.add(new In_List(i, "Item Number :"+i+1, i*2,0));
}
list = (ListView) findViewById(R.id.ListView_listing);
list.setAdapter(new List_Adapter(this, R.layout.entry, data){
@Override
public void onInsert(Object entr, View view) {
if (entr != null) {
TextView id_Text = (TextView) view.findViewById(R.id.textView_id);
if (id_Text != null)
id_Text.setText(((In_List) entr).get_id());
TextView info_Text = (TextView) view.findViewById(R.id.textView_info);
if (info_Text != null)
info_Text.setText(((In_List) entr).get_text());
TextView inside_Text = (TextView) view.findViewById(R.id.textView_inside);
if (inside_Text != null)
inside_Text.setText(((In_List) entr).get_a());
TextView Qty_Text = (TextView) view.findViewById(R.id.textView_qty);
if (Qty_Text != null || Qty_Text.getText().toString().equals(0))
Qty_Text.setText(((In_List) entr).get_Qty());
Qty_Text.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Add_Qty();
}
});
}
}
});
// list.setOnItemClickListener(new OnItemClickListener() {
// @Override
// public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// In_List chosen = (In_List) parent.getItemAtPosition(position);
//
// CharSequence text = "Selected: " + chosen.get_textoDebajo();
// Toast toast = Toast.makeText(MainActivity.this, texto, Toast.LENGTH_LONG);
// toast.show();
// }
// });
}
}
现在,当我向下滚动列表时,我输入的Qtys会消失或移动到另一行。
固定。我根本没有建立Qty_Text值。还制作了一个保存到适配器数组中的方法。
答案 0 :(得分:0)
EditTexts通常非常棘手。在ListView中使用它们几乎是不可能的。例如,EditTexts的特殊行为总是自动假设焦点与ListView的View回收混合使用ListView并导致很多问题。我建议你寻找另一种解决方案。例如,将EditText放在ListView的HeaderView中是很好的,因为滚动ListView时HeaderView不会被回收。