Android 具有EditText行为的ListView

Android 具有EditText行为的ListView,android,listview,android-edittext,Android,Listview,Android Edittext,我注意到我的应用程序上有一个带有三个EditText的ListView的extrage行为, 问题是,每当我选择一个文本编辑并移开焦点,然后返回我在第一行中所写的文本时,我选择的文本要么消失,要么移到另一行,另外,当一个edittext被聚焦时,我在列表中向下看时,似乎我已经在相同的位置选择了edittext,但在我真正聚焦的位置(我可以写入的位置)之后选择了10或11行 你知道那个案子吗 我也是android新手,所以我不知道这是否应该发生。 这是我正在使用的列表 public cla

我注意到我的应用程序上有一个带有三个EditText的ListView的extrage行为, 问题是,每当我选择一个文本编辑并移开焦点,然后返回我在第一行中所写的文本时,我选择的文本要么消失,要么移到另一行,另外,当一个edittext被聚焦时,我在列表中向下看时,似乎我已经在相同的位置选择了edittext,但在我真正聚焦的位置(我可以写入的位置)之后选择了10或11行

你知道那个案子吗

我也是android新手,所以我不知道这是否应该发生。 这是我正在使用的列表

    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,当有人单击列表中的一行时弹出窗口。是的,这就是我经常解决此问题的方式。对话框或对话框片段是一个很好的解决方案。看起来有些问题已经解决,但滚动问题仍然存在。我猜问题出在我的适配器上,但我无法粘贴代码。请尽快要发布您的代码,我可以尝试查找错误。