2017-02-27 39 views
0

我正在爲我的ListView使用自定義適配器,以擴充每個列表項目的佈局。對於每個列表項目,佈局中都有一個按鈕,允許用戶從列表視圖中刪除項目。還有一個用戶輸入的編輯文本。我遇到了一些問題,當填充編輯文本時,但用戶刪除該項目時,該值將轉到其下面列表項的編輯文本。例如,如果列表視圖的位置1中的編輯文本的值爲'25',則用戶單擊以刪除該項目,值'25'將移至位置1中的新項目。使用客戶適配器的ListView將編輯文本值從已刪除項目移至下一項目

我的適配器類別

public class PartOrderAddPartAdapter extends ArrayAdapter<Part> { 
private static final int layoutResourceId = R.layout.part_information_list_item; 
private List<Part> partList; 
private final Context context; 

public PartOrderAddPartAdapter(Context context, List<Part> partList) { 
    super(context, layoutResourceId, partList); 
    this.context = context; 
    this.partList = partList; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = convertView; 

    if (view == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     view = inflater.inflate(layoutResourceId, null); 
    } 

    Part p = getItem(position); 

    TextView partNumber = (TextView) view.findViewById(R.id.part_number); 
    TextView partDescription = (TextView) view.findViewById(R.id.part_description); 
    EditText quantity = (EditText) view.findViewById(R.id.quantity); 
    Button removePartButton = (Button) view.findViewById(R.id.remove_part_button); 

    partNumber.setText(p.getPartNumber()); 
    partDescription.setText(p.getDescription()); 

    removePartButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      partList.remove(position); 
      notifyDataSetChanged(); 
     } 
    }); 

    return view; 
} 

@Override 
public Part getItem(int position) { 
    return partList.get(position); 
} 
} 

回答

1

您需要記住該行的視圖已被重用。 當未使用的存在時,它不會創建新的。你可以在convertView中接收它以進行重新填充 - 就像你在自己的代碼中看到的一樣。

因此,如果之前有一個值,那麼它仍然會在那裏。 這是由你來清除它。

簡而言之,您必須爲行中的所有字段設置值。你不能假設任何有關價值的東西。

0

當你正在重用的意見,當它被重用您對視圖的任何變化將是可見的(即當您滾動或刷新列表)。在你的情況下,你是從列表中刪除項目,但不清除視圖中的文本。當您調用notifyDataSetChanged()並且文本仍然可見時,該視圖會上移。

你需要做什麼很明顯,從該位置的視圖中的文本調用notifyDataSetChanged前()。

另一件需要注意的是使用條件語句的重複使用列表中的適配器的看法時。總之,總是跟隨if和else,以確保您的視圖在語句計算爲false時重置爲默認狀態。