2017-06-05 45 views
1

在自定義數組適配器中,我有一個「true」或「false」字符串值列表。迭代中的Android切換開關按鈕

public class CustomFriendList extends ArrayAdapter<String> { 

private final Activity context; 
private List<String> friendName = new ArrayList<String>(); 
private List<String> backchatable = new ArrayList<String>(); 


public CustomFriendList(Activity context, List<String> friendName, List<String> backchatable){ 
    super(context, R.layout.fragment_friend_list_item, friendName); 
    this.context = context; 
    this.friendName = friendName; 
    this.backchatable = backchatable; 
} 

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView= inflater.inflate(R.layout.fragment_friend_list_item, null, true); 
    TextView friend = (TextView) rowView.findViewById(R.id.friendName); 
    Switch switchBackChat = (Switch) rowView.findViewById(R.id.on_off_backchatable); 

    friend.setText(friendName.get(position)); 

    for (String ele : backchatable) { 
     //System.out.println(ele.toString()); 
     if(ele.equals("false")){ 
      switchBackChat.setChecked(false); 
     }else if(ele.equals("true")){ 
      switchBackChat.setChecked(true); 
     } 
    } 

    return rowView; 
} 


} 

我期待根據值「true」或「false」設置開關的狀態。

但是,上面的代碼切換了自定義listView中的所有開關,而不是在listView中某個位置的相應開關。

+0

您可以發佈您的整個getView方法嗎?另外,正如@Pavneet_Singh所建議的,您沒有正確地檢查字符串值(使用ele.equals(「false」),因爲這是在Java中檢查字符串值的正確方法)。 –

+0

從==到.equals的檢查是正確的。但是,各個開關不會相應地改變。他們都一起改變。 – Jupiter

回答

2

在if語句中使用ele.equals(「false」)和ele.equals(「true」),或者只使用布爾值代替字符串值。

爲什麼在遍歷可逆數組的時候設置了checked狀態?由此只有數組的最後一個字符串很重要,如果最後一個字符串是「false」,則不檢查該開關,如果最後一個字符串爲「true」,則將檢查開關。

+0

這正是問題所在。但是如何獨立改變開關?我一直試圖設置listView項目,其中包含一個textView和切換一致,但因爲我無法從一個共同的列表更新他們,所以我做了兩個列表。 – Jupiter

+0

我們可以看到更多的代碼嗎? – AppPhil

+0

檢查編輯。基本上我試圖把每個listView行放在textView中的「朋友的名字」的組合,並將開關設置爲「true/false」。不幸的是,我必須做這個過程從兩個列表中提取數據,因爲從一個JSONObject I無法創建此自定義陣列適配器可以用來呈現listView的單個列表。 – Jupiter