如果用户不是高级用户,则禁用 Listview 项目点击
Disable Listview item clicks if user is not premium user
我有一个以 checkedTextview 项目作为行的列表视图。列表视图是导航抽屉的布局。
我想要实现的是,如果它们不是高级版,则提示播放商店对话框并且不允许他们更改检查状态。如果他们是高级版,则不显示高级版对话框,并允许他们更改复选框的状态。
我在几个不同的地方尝试了 if/else 来检查它们是否是高级的,但它没有用,因为我仍然能够单击并更改复选框的状态。
列表视图中的项目仅 able/clickable 高级用户可以访问。如果他们不是高级版,那么当他们单击列表项时,一个 google 播放对话框将提示用户升级。我试过了
许多不同的选项,如设置 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;
}
}
});
}
您需要根据用户权限设置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...
}
}
我有一个以 checkedTextview 项目作为行的列表视图。列表视图是导航抽屉的布局。
我想要实现的是,如果它们不是高级版,则提示播放商店对话框并且不允许他们更改检查状态。如果他们是高级版,则不显示高级版对话框,并允许他们更改复选框的状态。
我在几个不同的地方尝试了 if/else 来检查它们是否是高级的,但它没有用,因为我仍然能够单击并更改复选框的状态。
列表视图中的项目仅 able/clickable 高级用户可以访问。如果他们不是高级版,那么当他们单击列表项时,一个 google 播放对话框将提示用户升级。我试过了 许多不同的选项,如设置 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;
}
}
});
}
您需要根据用户权限设置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...
}
}