2015-02-05 66 views
1

我在ListView中輸入了EditText的值,但是當我向上和向下滾動時,值不會聚焦並丟失。請幫幫我。我是新手。ListView中的EditText在向上和向下滾動時丟失值

我試過TextWatcher,並將數據保存到array,但問題是ListView中返回的視圖位置並不總是正確的,所以我從數組中丟失了一些數據。

這是我的代碼

public class ListViewAdapter extends BaseAdapter { 
private Context context; 
private ArrayList<HashMap<String, String>> data; 
private LayoutInflater inflater; 
private View itemView; 
HashMap<String, String> Result = new HashMap<String, String>(); 
private Bitmap ImageCover; 

private TextView bookname; 
private TextView bookcode; 
private TextView index; 
private ImageView bookcover; 
private String BookIDSend; 
private String QtySend; 
private EditText TxtStock; 
private String[] valueList; 
private boolean InputState; 

public ListViewAdapter(Context context, ArrayList<HashMap<String, String>> arraylist, boolean state) { 
    this.context = context; 
    data   = arraylist; 
    valueList  = new String[data.size()]; 
    InputState  = state; 
} 
@Override 
public int getCount() { 
    return data.size(); 
} 
@Override 
public Object getItem(int position) { 
    return position; } 

@Override 
public long getItemId(int position) { 
    return position; } 

public View getView(final int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.input_list_item, parent, false); 
     if ((position % 2) == 0) { 
      itemView.setBackgroundColor(Color.rgb(250,235,215)); 
     } else { 
      itemView.setBackgroundColor(Color.rgb(255,235,205)); 
     } 
     Result     = data.get(position); 
     ClassFile FileName  = new ClassFile(); 
     String AppDirectory  = FileName.GetAppDirectory(context); 
     String Directory  = AppDirectory+"/cover/"; 

     index     = (TextView) itemView.findViewById(R.id.numb); 
     bookname    = (TextView) itemView.findViewById(R.id.book_name); 
     bookcode    = (TextView) itemView.findViewById(R.id.code_book_input); 
     bookcover    = (ImageView) itemView.findViewById(R.id.imgCover); 
     TxtStock    = (EditText) itemView.findViewById(R.id.EdtIsi); 
     TxtStock.setText(Result.get(InputActivity.INITIAL_STOCK)); 

     final int pos = position; 
     valueList[pos] = Result.get(InputActivity.INITIAL_STOCK); 
     if (InputState){ 
      TxtStock.setEnabled(true); 
     }else{ 
      TxtStock.setEnabled(false); 
     } 
     TxtStock.addTextChangedListener(new TextWatcher() { 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) { 
      } 
      public void afterTextChanged(Editable s) { 
       valueList[pos] = s.toString().trim(); 
      } 
     }); 
     bookname.setText(Result.get(InputActivity.BOOKNAME)); 
     bookcode.setText(Result.get(InputActivity.BOOK_CODE)); 
     ClassImage Procimg  = new ClassImage(); 
     ImageCover    = Procimg.decodeSampledBitmapFromUri(Directory + Result.get(InputActivity.BOOKCOVER), 90, 120); 
     bookcover.setImageBitmap(ImageCover); 
    }else { 
     itemView = convertView; 
    } 

    int j = position+ 1; 
    index.setText("" + j); 
    return itemView; 
} 

THX前

+0

我想指出一個錯誤,在方法getItem中你必須返回數據[position] .........'public Object getItem(int position){ return data [position]; }' – Psypher

+0

錯誤先生。它表示「表達式的類型必須是數組」@Ranjith –

+1

'return data.get(position);'data是一個ArrayList。 – iForests

回答

0

當ListView控件被scrollered,它會調用該方法getView(),所以你需要將文本設置爲你的EditText,所以你需要做的是:在ListView控件

TxtStock.setText(valueList[pos]);

0

首先使用的EditText是不是一個好主意!但是,如果你要做到這一點,你可能會給一個嘗試..

改變你的代碼這樣的..

@Override 
public Object getItem(int position) { 
return data.get(position); } 

,並在getView(..)方法你回收的觀點,這就是爲什麼你正在失去你的數據。進行此更改..

移動此行'TxtStock.setText(Result.get(InputActivity.INITIAL_STOCK)); 到內部getView所述的if..else條件(..)

希望這helps..Only findViewById當convertView爲空外且所有其它設置方法應被called`outside所述的if..else條件時你回收的看法。謝謝!! ; D

+0

對不起,先生這對我不起作用.. –

相關問題