Android 动态添加View

目前安卓的控件中,ListView可以动态添加显示内容。但是我遇到了这样一个问题,在一个页面中,已经有了一个

ScrollView,在xml布局中,它提示我不能有两个纵向滑动的控件(大概是这个意思),我还想添加一个数目不定的

同一类View,后来根据Listview动态展示内容的方式,自己实现了动态添加View的功能。

布局文件的一部分代码:

<LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="15dip"
            android:layout_marginRight="15dip"
            >
            <LinearLayout 
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                >
                <TextView 
                    android:layout_width="2dip"
                    android:layout_height="15dip"
                    android:background="@drawable/icon_some_museum_title_txt"
                    />
                <TextView 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="6dip"
                    android:textSize="14sp"
                    android:textColor="@color/some_museum_title_text_color"
                    android:text="@string/exhibitionhall_introduction"
                    />
            </LinearLayout>
            <TextView 
                android:layout_width="match_parent"
                android:layout_height="2dip"
                android:background="@drawable/pic_some_museum_exhibitionhall_line"
                android:layout_marginTop="4dip"
                />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:id="@+id/themehall_introduction"
                >

            </LinearLayout>

上面的代码中,
LinearLayout
android:id=”@+id/themehall_introduction”
是预留的,用来动态添加布局的,类似ListView中的ListView … android:id=”@+id/listview”
,用来动态添加展示的内容。
要动态添加到这个地方的View是这样的:apart_dynamic_load_themehall.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:layout_marginLeft="3dip"
    android:layout_marginTop="3dip"
    android:baselineAligned="false"
    android:background="@drawable/btn_layout_click_bg">

          <RelativeLayout
              android:layout_weight="1"
              android:layout_width="0dip"
              android:layout_height="90dip"
              android:layout_marginLeft="10dip"
              android:layout_marginRight="3dip"
              android:layout_marginTop="5dip"
              android:layout_marginBottom="5dip"
              android:background="@drawable/pic_some_museum_botany"
              android:id="@+id/inreoduce_themehall1"
              >
              <TextView 
                  android:layout_width="match_parent"
                  android:layout_height="18dip"
                  android:background="#7F000000"
                  android:text="@string/exhibitionhall_botany"
                  android:textSize="12sp"
                  android:textColor="#FFFFFF"
                  android:layout_alignParentBottom="true"
                  android:paddingLeft="5dip"
                  android:id="@+id/tv_themehall_name1"
                  />
          </RelativeLayout>
          <RelativeLayout 
              android:layout_weight="1"
              android:layout_width="0dip"
              android:layout_height="90dip"
              android:layout_marginLeft="10dip"
              android:layout_marginRight="3dip"
              android:layout_marginTop="5dip"
              android:layout_marginBottom="5dip"
              android:background="@drawable/pic_some_museum_dinosaur_park"
              android:id="@+id/inreoduce_themehall2"
              >
              <TextView 
                  android:layout_width="match_parent"
                  android:layout_height="18dip"
                  android:background="#7F000000"
                  android:text="@string/exhibitionhall_dinosaur_park"
                  android:textSize="12sp"
                  android:textColor="#FFFFFF"
                  android:layout_alignParentBottom="true"
                  android:paddingLeft="5dip"
                  android:id="@+id/tv_themehall_name2"
                  />
          </RelativeLayout>

</LinearLayout>

前期工作准备好了,那么久开始上真正的代码了

private void initLinearLayoutThemehall(){
        LayoutInflater mInflater = SomeMuseumActivity.this.getLayoutInflater();

        try {
            listThemehall = RDB_ThemehallImpl.getRThemehallList(SomeMuseumActivity.this, lrMuseum.getMuseumHashCode());
            if (listThemehall!=null && listThemehall.size()>0) {
                for (int i = 0; i < listThemehall.size(); i++) {
                    if (i%2==1) {
                        initThemehallViewDouble(mInflater,i);
                    }
                    if (listThemehall.size()%2==1 && listThemehall.size()-1 == i) {
                        initTemehallViewSingle(mInflater,i);
                    }
                }
            }
        } catch (DBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

上面这部分代码是在onCreate方法中调用的,是动态添加View的入口。if (i%2==1) {
initThemehallViewDouble(mInflater,i);
}
if (listThemehall.size()%2==1 && listThemehall.size()-1 == i) {
initTemehallViewSingle(mInflater,i);
}
是控制展示样式的。
具体动态添加的代码:

@SuppressLint("NewApi")
    private void initThemehallViewDouble(LayoutInflater mInflater,final int item){
        View view = mInflater.inflate(R.layout.apart_dynamic_load_themehall, null);
        RelativeLayout r1 = (RelativeLayout) view.findViewById(R.id.inreoduce_themehall1);
        RelativeLayout r2 = (RelativeLayout) view.findViewById(R.id.inreoduce_themehall2);
        TextView tv1 = (TextView) view.findViewById(R.id.tv_themehall_name1);
        TextView tv2 = (TextView) view.findViewById(R.id.tv_themehall_name2);

        if (listThemehall.get(item-1)!=null) {
            String tHashCode = listThemehall.get(item-1).getThemeHallCode();
            File fDir1 = new File(new SDCardUtil(SomeMuseumActivity.this).getMuseums()+File.separator+
                    lrMuseum.getMuseumHashCode()+File.separator+"themehall"+File.separator+
                    tHashCode+File.separator+"themehallpic");
            if (fDir1!=null && fDir1.exists()) {
                String picPath = SDCardUtil.getPicAbsolutePath(fDir1, tHashCode);
                if (picPath!=null && !"".equals(picPath)) {
                    Bitmap bitmap = SDCardUtil.getBitmapFromSD(picPath);
                    if (bitmap!=null) {
                        r1.setBackground(new BitmapDrawable(bitmap));
                    }
                }
            }
            r1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent in = new Intent(SomeMuseumActivity.this, ThemehallIntroductionActivity.class);
                    in.putExtra("tHashCode", listThemehall.get(item-1).getThemeHallCode());
                    startActivity(in);
                }
            });
            tv1.setText(listThemehall.get(item-1).getThemeHallName());
        }

        if (listThemehall.get(item)!=null) {
            String tHashCode = listThemehall.get(item).getThemeHallCode();
            File fDir2 = new File(new SDCardUtil(SomeMuseumActivity.this).getMuseums()+File.separator+
                    lrMuseum.getMuseumHashCode()+File.separator+"themehall"+File.separator+
                    tHashCode+File.separator+"themehallpic");
            if (fDir2!=null && fDir2.exists()) {
                String picPath = SDCardUtil.getPicAbsolutePath(fDir2, tHashCode);
                if (picPath!=null && !"".equals(picPath)) {
                    Bitmap bitmap = SDCardUtil.getBitmapFromSD(picPath);
                    if (bitmap!=null) {
                        r1.setBackground(new BitmapDrawable(bitmap));
                    }
                }
            }
            r2.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent in = new Intent(SomeMuseumActivity.this, ThemehallIntroductionActivity.class);
                    in.putExtra("tHashCode", listThemehall.get(item).getThemeHallCode());
                    in.putExtra("mHashCode", lrMuseum.getMuseumHashCode());
                    startActivity(in);
                }
            });
            tv2.setText(listThemehall.get(item).getThemeHallName());
        }

        lineDynamicThemehall.addView(view);

    }

    @SuppressLint("NewApi")
    private void initTemehallViewSingle(LayoutInflater mInflater,final int item){
        View view = mInflater.inflate(R.layout.apart_dynamic_load_themehall, null);
        RelativeLayout r1 = (RelativeLayout) view.findViewById(R.id.inreoduce_themehall1);
        RelativeLayout r2 = (RelativeLayout) view.findViewById(R.id.inreoduce_themehall2);
        TextView tv1 = (TextView) view.findViewById(R.id.tv_themehall_name1);
        r2.setVisibility(View.INVISIBLE);

        File fDir = new File(new SDCardUtil(SomeMuseumActivity.this).getMuseums()+File.separator+lrMuseum.getMuseumHashCode()+File.separator+"themehall"+File.separator+listThemehall.get(item).getThemeHallCode()+File.separator+"themehallpic");
        if (fDir!=null && fDir.exists()) {
            String picPath = SDCardUtil.getPicAbsolutePath(fDir, listThemehall.get(item).getThemeHallCode());
            if (picPath!=null && !"".equals(picPath)) {
                Bitmap bitmap = SDCardUtil.getBitmapFromSD(picPath);
                if (bitmap!=null) {
                    r1.setBackground(new BitmapDrawable(bitmap));
                }
            }
        }
        tv1.setText(listThemehall.get(item).getThemeHallName());
        r1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent in = new Intent(SomeMuseumActivity.this, ThemehallIntroductionActivity.class);
                in.putExtra("tHashCode", listThemehall.get(item).getThemeHallCode());
                in.putExtra("mHashCode", lrMuseum.getMuseumHashCode());
                startActivity(in);
            }
        });

        lineDynamicThemehall.addView(view);
    }

这样就可以动态添加View了,还可以点击动态添加的View。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值