2 mfcpple mfcpple 于 2013.12.10 14:03 提问

android ViewFlipper管理的子页面中Button设置setEnabled(false)后执行无效,在线急等

android FrameLayout布局中ViewFlipper管理的子页面中添加添加控件Button、SeekBar等控件,代码动态设置这些控件为不可用setEnabled(false) 代码执行后无效,控件还是可以继续使用,求高手解答。。。在线等。。

如果对activity中的控件 该控件未在ViewFlipper管理的子页面中,如对Button设置 setEnabled(false)后 该代码执行后控件被禁用。

代码如下

public void onLock(View v){
        if (v.getId() == R.id.BntLock){
            bIsLocked = !bIsLocked;
        }

        View view = LayoutInflater.from(this).inflate(R.layout.tab3, null);
        if (bIsLocked){
            ((ImageView)findViewById(R.id.lock)).setImageDrawable(getResources().getDrawable(R.drawable.icon_lock_small));//这个是Activity上的ImageView  对这个控件进行设置后,直接结果OK
            ((Button)findViewById(R.id.BntLock)).setBackground(getResources().getDrawable(R.drawable.icon_lock_big));//这个是Activity上的Button  对这个控件进行设置后,直接结果OK


            //以下5个Button是在子页面上的控件,设置后代码执行后  Button还是继续能用
            ((Button)view.findViewById(R.id.BntTab3Fun01)).setEnabled(false);
            ((Button)view.findViewById(R.id.BntTab3Fun01)).setEnabled(false);
            ((Button)view.findViewById(R.id.BntTab3Fun02)).setEnabled(false);
            ((Button)view.findViewById(R.id.BntTab3Fun03)).setEnabled(false);
            ((Button)view.findViewById(R.id.BntTab3Fun04)).setEnabled(false);
            ((Button)view.findViewById(R.id.BntTab3Fun05)).setEnabled(false);

        }else {

((ImageView)findViewById(R.id.lock)).setImageDrawable(getResources().getDrawable(R.drawable.icon_unlock_small));//同上
            ((Button)findViewById(R.id.BntLock)).setBackground(getResources().getDrawable(R.drawable.icon_unlock_big));//同上

            ((Button)view.findViewById(R.id.BntTab3Fun01)).setEnabled(true);
            ((Button)view.findViewById(R.id.BntTab3Fun02)).setEnabled(true);
            ((Button)view.findViewById(R.id.BntTab3Fun03)).setEnabled(true);
            ((Button)view.findViewById(R.id.BntTab3Fun04)).setEnabled(true);
            ((Button)view.findViewById(R.id.BntTab3Fun05)).setEnabled(true);
        }
    }

1个回答

songzhiyong1121
songzhiyong1121   2013.12.10 17:02
已采纳

大概试了一下,有效,也使用的FrameLayout,我看你这个lock方法,view是重新inflate的,如果是你已经添加过,这个方法中的View没有重新添加,自然没有效果,不知道这个方法调用的场景是如何的,再仔细看看。不知道能不能帮上你的忙,你比较一下有什么不一样的吧

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mActivity = this;
    viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
    gestureDetector = new GestureDetector(this);

    for (int i = 0; i < 10; i++) {
        View view = LayoutInflater.from(this).inflate(R.layout.item, null);
        Button btnButton = (Button) view.findViewById(R.id.btn);
        btnButton.setText("第" + i + "个");
        btnButton.setEnabled(false);
        btnButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ViewFlipperActivity.this, "Enable=true",
                        Toast.LENGTH_SHORT).show();
            }
        });
        viewFlipper.addView(view, new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }
}
mfcpple
mfcpple 现在确实是这样的,我重写了ScrollView继承原ScrollView,重写onTouchEvent方法,当我点击在空白处的时候onTouchEvent方法可以收到消息,如果点击在EditText上,还未放开时进行上下滚动的时候ScrollView就收不到onTouchEvent事件了,按下事件被EditText拦截了
4 年多之前 回复
songzhiyong1121
songzhiyong1121 scrollview不应该出现这样的问题啊,一般是scrollview+viewpager会出现手势问题
4 年多之前 回复
mfcpple
mfcpple 用Button只是我举的一个例子,页面中还有EditTexta啊,而且占用了页面中大部分空间,导致ScrollView几乎都不能使用。
4 年多之前 回复
songzhiyong1121
songzhiyong1121 解决了记得采纳答案呀,亲。为什么一定要用button呢,有时候imageview可以取代button啊
4 年多之前 回复
mfcpple
mfcpple 谢谢Jerome_Song的帮助 按照你的方法解决问题。十分感谢,解决了困扰我这么久的问题。现在我还有个问题请教一下,我在页面中用了一个ScrollView,当页面中有Button时,如果正好是触碰到Button时就无法滚动页面,ScrollView无法收到onTouchEvent事件,请问如果做才能在触碰到Button时不影响到页面滚动,如果点击按钮也能正常响应按钮的点击事件。
4 年多之前 回复
songzhiyong1121
songzhiyong1121 所以所肯定没效果啦,inflate出来的是新View,你又没添加,不是当前的子界面。试试viewFlipper.getCurrentView().findViewById(buttonId);
4 年多之前 回复
mfcpple
mfcpple 那5个Button所在的子页面当前正在显示,改子页面view已经添加进来了
4 年多之前 回复
mfcpple
mfcpple 这个也许和我的布局有关吧,请加我QQ 晚上回去帮我调试一下行么,我是新手,这问题折腾我几天了 229293768
4 年多之前 回复
mfcpple
mfcpple 代码已经贴上,请帮忙看看。谢谢。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!