Android 具有EditText行为的ListView
我注意到我的应用程序上有一个带有三个EditText的ListView的extrage行为, 问题是,每当我选择一个文本编辑并移开焦点,然后返回我在第一行中所写的文本时,我选择的文本要么消失,要么移到另一行,另外,当一个edittext被聚焦时,我在列表中向下看时,似乎我已经在相同的位置选择了edittext,但在我真正聚焦的位置(我可以写入的位置)之后选择了10或11行 你知道那个案子吗 我也是android新手,所以我不知道这是否应该发生。 这是我正在使用的列表Android 具有EditText行为的ListView,android,listview,android-edittext,Android,Listview,Android Edittext,我注意到我的应用程序上有一个带有三个EditText的ListView的extrage行为, 问题是,每当我选择一个文本编辑并移开焦点,然后返回我在第一行中所写的文本时,我选择的文本要么消失,要么移到另一行,另外,当一个edittext被聚焦时,我在列表中向下看时,似乎我已经在相同的位置选择了edittext,但在我真正聚焦的位置(我可以写入的位置)之后选择了10或11行 你知道那个案子吗 我也是android新手,所以我不知道这是否应该发生。 这是我正在使用的列表 public cla
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);
}
公共抽象类列表\u适配器扩展BaseAdapter{
私人ArrayList ins;
专用内部视图;
私人语境;
公共列表适配器(上下文上下文、内部布局、数组列表){
超级();
this.context=上下文;
this.ins=ins;
this.R\u layout\u IdView=R\u layout\u IdView;
}
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
如果(视图==null){
LayoutInflater vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
视图=vi.充气(R\u布局图\u IdView,空);
}
onInsert(ins.get(位置)、视图);
返回视图;
}
@凌驾
public int getCount(){
返回ins.size();
}
@凌驾
公共对象getItem(int位置){
返回ins.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
公共摘要void onInsert(对象插入、视图);
}
这里是主要的活动。它有一个弹出窗口,我用来填写数量值,但我不包括它
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();
// }
// });
}
}
公共类MainActivity扩展活动{
私有列表视图列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.listing);
ArrayList数据=新的ArrayList();
对于(int i=0;iEditText in通常非常棘手。在ListView中使用它们几乎是不可能的。例如,EditText的特殊行为总是自动假定焦点,再加上ListView的视图循环,这会扰乱ListView并导致许多问题。我建议您寻找另一种解决方案。对于示例:将EditText放置在ListView的HeaderView中是可以的,因为在滚动ListView时HeaderView不会被回收。这是因为ListView中的视图回收。感谢您的回答,现在我需要看看如何才能做到这一点,因为我需要在其中一个编辑文本中输入值,我想我将使用clicklistener,当有人单击列表中的一行时弹出窗口。是的,这就是我经常解决此问题的方式。对话框或对话框片段是一个很好的解决方案。看起来有些问题已经解决,但滚动问题仍然存在。我猜问题出在我的适配器上,但我无法粘贴代码。请尽快要发布您的代码,我可以尝试查找错误。