如果用户不是高级用户,则禁用 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;
            }
        }
    });
}

!What my Navigation Drawer Looks like1

您需要根据用户权限设置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...
    }
}