2015-02-23 40 views
0

我向我的ListView添加了3個項目。每個項目都說「測試」。當我點擊一個項目時,我清除了該項目的文本。但是,當我檢查「手錶」日誌中的變量時,即使刪除了文本,該項仍被命名爲「測試」。ListView文本更改但不包含適配器數據

手錶日誌:

adapter2.getItem(1) = {[email protected]}"Test" 
list.getItemAtPosition(1) = {[email protected]}"Test" 

我想ListView到被點擊

例如手錶日誌看起來應該是這樣後得到更新,使該項目的空白:

adapter2.getItem(1) = {[email protected]}"" 
list.getItemAtPosition(1) = {[email protected]}"" 

有人可以告訴我爲什麼我的這種情況正在發生並提供解決方案嗎?

編輯代碼

public class ListView2 extends Fragment { 

    ListView list; 
    ArrayAdapter<String> adapter2; 
    List<String> array_list; 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
          @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.listview2, container, false); 

    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     array_list = new ArrayList<String>(); 

     array_list.add("Test"); 
     array_list.add("Test"); 
     array_list.add("Test"); 

     //Build Adapter 
     adapter2 = new ArrayAdapter<String>(getActivity(), R.layout.items, array_list); 

     //Configure the list view 
     list = (ListView) getActivity().findViewById(R.id.listview2); 
     list.setAdapter(adapter2); 

     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 

       TextView txt = (TextView)view.findViewById(R.id.txt); 
       if(txt.getText().toString().equals("Test")) { 
        txt.setText(""); 
       }else{ 
        txt.setText("Test"); 
       } 
       adapter2.notifyDataSetChanged(); 
      } 
     }); 

    } 
} 
+0

調用adapter.notifyDatasetchanged()當您更新文本 – 2015-02-23 04:57:41

+0

我試過,但它不工作。當我調用adapter.notifyDatasetchanged()時,我點擊時沒有任何反應。 「Test」永不消失 – user2456977 2015-02-23 05:01:43

+0

您正在將文本添加爲​​adapter2.add(「Test」);更新文本在點擊的位置,然後調用adapter.notifydatasetchanged() – 2015-02-23 05:07:49

回答

2

試圖直接更新TextView並不是好的方法。你可以使用remove()和insert()方法來更新你的ArrayAdapter。對於參考,請檢查here

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      if(adapter2.getItem(position).equals("Test")) { 
       adapter2.remove("Test"); 
       adapter2.insert("", position); 
      }else{ 
       adapter2.remove(""); 
       adapter2.insert("Test", position); 
      } 
      adapter2.notifyDataSetChanged(); 
     } 
    }); 

UPDATE

這是另一種不刪除,當你在評論提到將進入相同的位置更新ArrayAdapter。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
     if(arrayList.get(position).equals("Test")) { 
      arrayList.set(position, ""); 
     }else{ 
      arrayList.set(position, "Test"); 
     } 
     adapter2.notifyDataSetChanged(); 
    } 
} 

希望它對你有用。

+0

感謝這很好的作品。如果有更直接的方式來更新列表視圖而不刪除條目並在同一位置添加新條目,那將會很好 – user2456977 2015-02-23 15:14:37

0

,您必須是獲得該行的視圖中的項目點擊聽者,使用該行的對象,並查找即你的情況一個TextView該行中的視圖。將該視圖的文本設置爲空白,並更改該位置上的數據集項目,以便視圖和數據同步。這樣就不需要更新整個列表並節省時間。

如果上述任何一點不明確,請提及。

相關問題