如果用户不是高级用户,则禁用Listview项目单击

时间:2016-03-24 11:41:39

标签: android listview google-play checkedtextview

我有一个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;
            }
        }
    });
}

!What my Navigation Drawer Looks like 1

1 个答案:

答案 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...
    }
}