2013-11-20 45 views
-1

我注意到我的應用程序中有一個帶有三個EditText的ListView, 的出錯行爲,問題是每當我選擇一個textedit並遠離焦點並返回我在第一個我選擇desapears或移動到一個不同的行,也是當編輯文本聚焦,我下了列表中,似乎我已經選擇了編輯文本在相同的位置,但10或11行後實際聚焦(一個我可以寫信給)。帶有EditText行爲的列表視圖

關於這種情況的任何知識?

也即時通訊新的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); 

} 

,這裏是主要的活動。它有一個彈出窗口,我用來填充數量的值,但我沒有包括它。

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

這是因爲在列表視圖中回收的視圖。 – njzk2

回答

0

EditTexts通常非常棘手。在ListView中使用它們幾乎是不可能的。例如,EditTexts的特殊行爲總是會自動假定焦點,並與ListView的ListViews視圖循環混合,並導致很多問題。我建議你尋找另一種解決方案。例如,將EditText放置在ListView的HeaderView內就沒有問題,因爲在滾動瀏覽ListView時HeaderView不會被回收。

+0

感謝您的答案,現在我需要看看我可以做到這一點,因爲我需要在其中一個編輯文本中輸入值,我猜不好使用clicklistener,並在有人點擊列表的一行時彈出一個窗口。 – Driff

+0

是的,這就是我經常解決這個問題的方法。對話框或DialogFragments是一個很好的解決方案。 –

+0

好吧,它似乎有些問題是固定的,但滾動問題仍然存在即時猜測問題是我的適配器,但我不能粘貼代碼atm。 – Driff