Listview与EditText行为

时间:2013-11-20 20:45:17

标签: android listview android-edittext

我注意到我的应用上有一个带有三个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值。还制作了一个保存到适配器数组中的方法。

1 个答案:

答案 0 :(得分:0)

EditTexts通常非常棘手。在ListView中使用它们几乎是不可能的。例如,EditTexts的特殊行为总是自动假设焦点与ListView的View回收混合使用ListView并导致很多问题。我建议你寻找另一种解决方案。例如,将EditText放在ListView的HeaderView中是很好的,因为滚动ListView时HeaderView不会被回收。