如何在Android中以编程方式更新linearlayout子视图? [英] How to update linearlayout child view programmatically in android?

查看:207
本文介绍了如何在Android中以编程方式更新linearlayout子视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经以编程方式创建了线性布局.在其中创建了多行具有白色背景的位置.现在,如果我单击任何一行,则仅应更改该行的imageview图标(应为绿色),而另一行的imageview背景应更改为白色. android中是否有针对线性布局的notifyDataSetChanged的subsubtitude.下面是我的代码.

I have created linearylayout programatically. where it has multiple rows created having white background. Now if I click on any row then only that row's imageview icon should be changed(should be green) and other row's imageview background should be changed to white. Is there any substitude of notifyDataSetChanged for linearlayout in android. below is my code.

for (int i = 0; i <= obj_tribe_info.al_ethnicity_secondary.size(); i++) {

            final int position = i;

            al_eth_bool.add(false);

            final LinearLayout ll_values = new LinearLayout(_activity);
            ll_values.setOrientation(LinearLayout.HORIZONTAL);
            ll_values.setGravity(Gravity.CENTER_VERTICAL);
            LayoutParams LLParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT);
            ll_values.setLayoutParams(LLParams);
            ll_values.setBackgroundResource(R.drawable.my_tribe_box_top);

            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(50, 0, 0, 0);

            final ImageView iv_icon = new ImageView(_activity);
            if (al_eth_bool.get(position)) {
                iv_icon.setBackgroundResource(R.drawable.notify_onn);
            } else {
                iv_icon.setBackgroundResource(R.drawable.notify_off);
            }
            iv_icon.setLayoutParams(layoutParams);
            ll_values.addView(iv_icon);

            TextView tv_value = new TextView(_activity);
            tv_value.setTextColor(_activity.getResources().getColor(
                    R.color.black));
            tv_value.setLayoutParams(layoutParams);
            if (i == 0) {
                tv_value.setText(obj_tribe_info.str_ethnicity_primary);
            } else {
                tv_value.setText(obj_tribe_info.al_ethnicity_secondary
                        .get(i - 1).str_ethnicity_secondary);
            }
            ll_values.addView(tv_value);

            ll_ethnicity.post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    ll_ethnicity.addView(ll_values);
                }
            });

            ll_values.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (al_eth_bool.get(position)) {
                        iv_icon.setBackgroundResource(R.drawable.notify_off);
                        al_eth_bool.set(position, false);
                    } else {
                        iv_icon.setBackgroundResource(R.drawable.notify_onn);
                        al_eth_bool.set(position, true);
                    }

                }
            });

        }

推荐答案

不,没有替代品notifyDataSetChanged(),您必须手动将这一更改通知您的ImageView.

No, there is no substitute for notifyDataSetChanged(), you have to manually inform your ImageViews of that change.

更改后,您可以像这样迭代:

You could iterate like this, as soon as you have a change:

for(int i= 0; i < ll_ethnicity.getChildCount(); i++){
    ImageView iv = (ImageView) ((ViewGroup)ll_ethnicity.getChildAt(i)).getChildAt(0);
    // new background because something has changed
    // check if it's not the imageView you just clicked because you don't want to change its background
    iv.setBackground(...);
}

为了获得更好的性能,您还可以使用ImageViews创建一个HashMap,然后访问它以根据需要更改其中的一些.

For better performance you may also create an HashMap with your ImageViews and later access it to change some of them as you see fit.

这篇关于如何在Android中以编程方式更新linearlayout子视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆