我有一個ListView
,其中包含複選框,其行爲有時像CHOICE_MODE_MULTIPLE
,有時像CHOICE_MODE_SINGLE
。我的意思是列表中的某些項目,當選擇某些其他項目需要取消選擇,而其他項目可以保持選擇。如何在單擊某個項目時更改Android ListView中的其他項目
所以當項目一個被選中,我可以在我的數據需要被選中,但我怎麼拿到UI刷新,以顯示這是我(我相信)無法找到實際的項目乙找到View
,代表B但只是它的數據?
我有一個ListView
,其中包含複選框,其行爲有時像CHOICE_MODE_MULTIPLE
,有時像CHOICE_MODE_SINGLE
。我的意思是列表中的某些項目,當選擇某些其他項目需要取消選擇,而其他項目可以保持選擇。如何在單擊某個項目時更改Android ListView中的其他項目
所以當項目一個被選中,我可以在我的數據需要被選中,但我怎麼拿到UI刷新,以顯示這是我(我相信)無法找到實際的項目乙找到View
,代表B但只是它的數據?
可以使用singleChoice alartDialog,我已經使用,如:
private int i = 0; // this is global
private final CharSequence[] items = {"Breakfast", "Lunch", "Dinner"}; // this is global
Button settings = (Button)view.findViewById(R.id.settings);
settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
//Title of Popup
builder.setTitle("Settings");
builder.setSingleChoiceItems(items, i,
new DialogInterface.OnClickListener() {
// When you click the radio button
public void onClick(DialogInterface dialog, int item){
i=item;
}
});
builder.setPositiveButton("Confirm",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (i == 0) {
//it means 1st item is checked, so do your code
}
if (i == 1) {
//it means 2nd item is checked, so do your code
} /// for more item do if statement
}
});
//When you click Cancel, Leaves PopUp.
builder.setNegativeButton("Cancel", null);
builder.create().show();
}
});
因此,對於第一次上settings
按鈕用戶點擊,選擇的第一個項目時,我已經初始化i=0
。然後當用戶選擇其他項目後,我保存了i
值,以便下次用戶點擊settings
按鈕時,我可以向用戶顯示他/她先前選擇的項目。
這聽起來像你是一個好開始。當你點擊A時,你應該操縱項目B的底層數據源。
兩個小技巧,可以幫助你:
getView()
在適配器方法應該是看你的數據源,並根據其發現改變convertView
。您無法找到代表B的實際視圖,因爲在ListView
中,Views
將被回收並在需要顯示不同的數據時重新使用。基本上,當一個項目從列表中滾動時,已使用的View
作爲convertView
傳遞到getView()
函數,準備處理下一個元素的數據。出於這個原因,您可能不應直接根據用戶輸入而改變View
中的ListView
,而應根據底層數據直接更改View
。notifyDataSetChanged()
來發出信號,指出底層數據已更改的某個位置,並且應該再次調用getView()
以顯示列表中當前顯示的元素。如果您仍然遇到問題,請隨時發佈一些代碼,說明您遇到的具體問題。當問題得到更好的定義時,提供具體的建議會容易得多。希望這可以幫助!
我今天碰到並解決了這個問題。
public class ItemChooceActivity extends Activity implements OnItemClickListener {
private int chosenOne = -1;
class Madapter extends BaseAdapter {
.....
.....
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
if (chosenOne != position) {
set the view in A style
} else {
set the view in B style
}
return convertView;
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long arg3) {
,,,,
chosenOne = position;
adapter.notifyDataSetChanged();
,,,
}
}
我想通了,我可以用'getChildAt'和'getFirstVisiblePosition'找到實際的'View'我需要考慮的項目指標和減去'getFirstVisiblePosition返回的值更新'。 – bornander 2013-02-20 22:37:43