button.setEnabled(false) 在 ViewPager 中不起作用

Posted

技术标签:

【中文标题】button.setEnabled(false) 在 ViewPager 中不起作用【英文标题】:button.setEnabled(false) doesn't work in ViewPager 【发布时间】:2016-05-30 20:24:52 【问题描述】:

好的,可能是我不明白某些内容,但我无法禁用 ViewPager 视图中的按钮, 这是一个示例,我尝试禁用按钮:

ViewPagerAdapter:

    @Override
    public Object instantiateItem(final ViewGroup container, int position) 

        if(views.size()>position&&views.get(position)!=null)
        
            currentView=views.get(position);

        
        else 
            currentView = (ViewGroup) inflater.inflate(R.layout.custom_row_cardbase_viewpager, container, false);
            currentView.setVisibility(View.VISIBLE);

                ....
                Button saveCard = (Button)currentView.findViewById(R.id.save_card_button);
                if(textColor == Color.BLACK)
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
                        saveCard.setTextColor(mActivity.getResources().getColorStateList(R.color.button_color_black,mActivity.getTheme()));
                    else
                        saveCard.setTextColor(mActivity.getResources().getColorStateList(R.color.button_color_black));
                    
                else
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
                        saveCard.setTextColor(mActivity.getResources().getColorStateList(R.color.button_color_white, mActivity.getTheme()));
                    else
                        saveCard.setTextColor(mActivity.getResources().getColorStateList(R.color.button_color_white));
                    
                
                if(db.checkIfCardAdded(pagerItems.get(position).getCardID()))
                    Log.e("Card already added",pagerItems.get(position).getCardName());
                    saveCard.setEnabled(false);
                


            


            ((ViewPager)container).addView(currentView);
            return currentView;
        

为什么禁用不起作用?我应该如何正确禁用按钮? “如果”代码运行良好。我也尝试禁用没有 "if" 的按钮,但这没有任何意义。 谁能解释一下我的问题?

谢谢。

编辑:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:orientation="vertical">

<android.support.v7.widget.CardView
    android:id="@+id/card_back_layout"
    android:layout_
    android:layout_
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    card_view:cardCornerRadius="5dp">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <RelativeLayout
            android:layout_
            android:layout_>

            <Button
               android:id="@+id/save_card_button"
               android:layout_
               android:layout_
               android:layout_alignParentRight="true"
               android:text="Save"/>


        <ImageView
            android:layout_centerHorizontal="true"
            android:id="@+id/card_back_logo"
            android:layout_
            android:layout_/>

        </RelativeLayout>

        <LinearLayout

            android:id="@+id/test"
            android:layout_
            android:layout_
            android:orientation="vertical">

            <RelativeLayout
                android:layout_marginLeft="7dp"
                android:layout_marginRight="7dp"
                android:layout_
                android:layout_
                android:layout_gravity="center"
                android:background="@color/white">


                <ImageView
                    android:id="@+id/barcode"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="7dp"
                    android:layout_alignParentTop="true"
                    android:layout_centerInParent="true"
                    android:layout_gravity="center"/>

                <TextView
                    android:paddingTop="3dp"
                    android:paddingBottom="1dp"
                    android:id="@+id/cardCode"
                    android:layout_
                    android:layout_
                    android:layout_below="@+id/barcode_card_base"
                    android:layout_centerInParent="true"
                    android:layout_gravity="center"
                    android:gravity="center_horizontal"
                    android:textColor="@color/black"
                    android:textStyle="bold" />
            </RelativeLayout>

            <TextView

                android:id="@+id/cardHolder"
                android:layout_
                android:layout_
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:textColor="@color/colorPrimaryDark"
                android:textSize="12sp"
                android:textStyle="bold" />


        </LinearLayout>
    </LinearLayout>
</android.support.v7.widget.CardView>

【问题讨论】:

为什么你的ViewGroup container 是最终的? @MuchOverflow 因为我需要在animationListener的onClick事件中使用它 你修好了吗? ? @Oloking 哦。很酷,是否应该根据条件启用或禁用按钮,并且它适用于列表中的所有项目?正确吗? @RaguSwaminathan 按钮应首先启用,当 viewpager 适配器为适配器的每个视图创建时,我检查它是否存在于数据库(Sqlite)中,如果是,则应禁用按钮 【参考方案1】:

您需要在代码的 else 部分设置 setEnable(true)。它肯定会奏效。

if (db.checkIfCardAdded(pagerItems.get(position).getCardID())) 
  Log.e("Card already added", pagerItems.get(position).getCardName());
  saveCard.setEnabled(false);
 else 
  saveCard.setEnabled(true);

有任何问题请告诉我。

【讨论】:

你提供的代码和我的一样,我还发现一个问题,当我在 xml 布局中禁用按钮时它也不起作用 不要在 XML 中使用禁用按钮,尝试以编程方式控制它

以上是关于button.setEnabled(false) 在 ViewPager 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 == false 评估为 false 而 [] == false 评估为 true?

为啥 false && (false)?false:true 返回 true

console.log(([])?true:false); console.log(([]==false?true:false)); console.log(({}==false)?true:fa

为啥“[False, True] 中的 not(True)”返回 False?

在js中,为啥!0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true

2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true