我有一个listview,其中checkedTextview项目作为行。 listview是导航抽屉的布局。
我想要实现的目标是,如果它们不是优质的,请提示播放商店对话框,不要让他们改变支票的状态。如果它们是高级的,请不要显示高级对话框,并允许它们更改复选框的状态。
我在几个不同的地方尝试过if / else来检查它们是否是高级版,但它没有用,因为我仍然可以点击并更改复选框的状态。
列表视图中的项目只能访问高级用户/可点击。如果它们不是溢价,那么当他们点击列表项时,谷歌播放对话框将提示用户升级。我试过了 设置listvivew.setEnabled(false)和setClickable(false)以及.invalidate();除了其他事情,但到目前为止没有工作。
private void addDrawerItems() {
String[] osArray = {"Bluetooth", "Reply to Calls", "Reply to sms", "customise message"};
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, osArray);
mDrawerList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView ctv = (CheckedTextView) view;
switch (position) {
case 0:
if (ctv.isChecked()) {
Toast.makeText(getApplicationContext(), "Bluetooth On", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Bluetooth OFF", Toast.LENGTH_LONG).show();
}
break;
case 1:
if (ctv.isChecked()) {
Toast.makeText(getApplicationContext(), "Calls Reply On", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Calls Reply OFF", Toast.LENGTH_LONG).show();
}
break;
case 2:
if (ctv.isChecked()) {
Toast.makeText(getApplicationContext(), "Sms Reply On", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Sms Reply OFF", Toast.LENGTH_LONG).show();
}
break;
case 3:
Toast.makeText(getApplicationContext(), "Customised Message", Toast.LENGTH_LONG).show();
break;
}
}
});
}
答案 0 :(得分:1)
您需要根据用户权限设置ListView
选择模式。
如果我们假设您有一个全局变量来指示用户状态
boolean mIsPremiumUser;
然后取决于它的价值:
if (mIsPremiumUser)
{
mDrawerList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
}
else
{
mDrawerList.setChoiceMode(AbsListView.CHOICE_MODE_NONE);
}
这将切换列表项的可检查状态。 OnItemClickListener
必须更改如下:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
CheckedTextView ctv = (CheckedTextView) view;
if (! mIsPremiumUser)
{
// code to display upgrade dialog here
return;
}
switch (position)
{
case 0:
// continue as before...
}
}