Android 动态添加View布局

     项目当中遇到了,RecycleView 嵌套RecycleView布局的需求来展示订单详情,都知道 这样都有滑动,点击事件的布局进行嵌套,你会有好多的BUG等着你去改。所以换了一下思路。采用动态添加布局的方式来避免这个问题。

     不做不知道,做了其实也很简单,注意事项,都写在注释上 不在赘述。


java代码


package com.android.study;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Main extends Activity {
    /** Called when the activity is first created. */
   /****
    * 功能:点击按钮动态增加view
    * 
    * 学习 LayoutInflater的使用办法.
    * 
    * 
    * 
    */
   private Button buttonAdd1;
   private Button buttonAdd2;
   private LayoutInflater  layoutInflater;
   private LinearLayout mainLayout;
   
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //方法一:取得LayoutInflater
        layoutInflater = getLayoutInflater();
        
        //方法二:
        //layoutInflater = LayoutInflater.from(this);
        
        //方法三:
        //layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);        
        
        
        mainLayout = (LinearLayout)findViewById(R.id.layout01);
        buttonAdd1 = (Button)findViewById(R.id.button1);
        buttonAdd2 = (Button)findViewById(R.id.button2);
        //给按钮增加监听事件
        buttonAdd1.setOnClickListener(new OnClickListener() {
         
         public void onClick(View v) {
            
            //根据LayoutInflater创建一个新的TextView,所以下面这一行代码不能放到外面事先生成.
            TextView newTextView = (TextView)layoutInflater.inflate(R.layout.infater01,null);
            
            newTextView.setText("卧槽,这都可以 ");
            //查看每次生成的TextView是否相同
            newTextView.setText(newTextView.getText() + "::hashCode " + newTextView.toString());
            
            //把TextView加入的当前layout中,R.id.layout01 是主layout的xml里面的id,如果你没有,需要加上
            mainLayout.addView(newTextView);
            //再加一次看能否成功.不能成功,说明了addView 必须不相同.
            //((LinearLayout)findViewById(R.id.layout01)).addView(newTextView);
         }
      });
        

        buttonAdd2.setOnClickListener(new OnClickListener() {
         
         public void onClick(View v) {
            
            layoutInflater.inflate(R.layout.infater02,mainLayout);
            //可以重复添加,能明白其中的原因吧
            layoutInflater.inflate(R.layout.infater02,mainLayout);
         }
      });
    }
}


xml

main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="方法一"></Button>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="方法二"></Button>

</LinearLayout>

inf01

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="---------infater02--------" />



inf02

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="---------infater01--------" />




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值