android 动态添加控件并实现每个子控件的点击事件

需求:我们要点击进入一家店铺,根据不同的店铺,显示不同条数的子条目 如:消毒间,洗菜间等。。。这些都是或多或少的,所以需要动态添加:

首先自定义View(linearLayout):

package cn.qust.fang.widget;

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import cn.qust.fang.CHANGLIANG.ChangLiang;
import cn.qust.fang.DB.DBManager;
import cn.qust.fang.domain.Shop;
import cn.qust.fang.main.MvplayActivity123;
import cn.qust.fang.main.R;

public class RightTopChildsLayouts extends LinearLayout {
    Shop shop=null;
	private TextView text_name_sub,textview_mvurl;
	View view;
    MvplayActivity123 currentactivity;
    /**
     * 配菜间  消毒间什么的
     */
    String zi_name;
    /**     * 配菜间 消毒间的 的视频url
     */
    String zi_mvurl;
	public RightTopChildsLayouts(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}
//自定义构造函数
	public RightTopChildsLayouts(MvplayActivity123 context,Shop shop,String zi_name,String zi_mvurl){
		super(context );

	view = LayoutInflater.from(context).inflate(R.layout.sub_right_top, null);
		text_name_sub=(TextView) view.findViewById(R.id.textview1);
		/**
		 * 存mv_url
		 */
		textview_mvurl=(TextView) view.findViewById(R.id.textview_gone);
		//把获得的view加载到这个控件中
		addView(view);
		this.currentactivity=context;

		this.shop=shop;
		this.zi_mvurl=zi_mvurl;
		this.zi_name=zi_name;

		text_name_sub.setText(zi_name);
		textview_mvurl.setText(zi_mvurl);
		view.setOnClickListener(new OnClickListener(){
  //点击事件
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(!getZi_mvurl().equals("collect")){
					//若不是收藏  就切换视频

					System.out.println("点击=====RightTopChildsLayouts==zi_name========"+getZi_name());
							VideoView mVideoView =	currentactivity.getmVideoView();
							mVideoView.pause();
							Uri uri = Uri.parse(getZi_mvurl());
							mVideoView.setVideoURI(uri);
							mVideoView.start();

				}
				else {
					/**
					 * 在这里进行收藏 如果已收藏  显示已收藏
					 */
					System.out.println("点击=收藏====RightTopChildsLayouts==zi_name========"+getZi_name());

					if (getShop() == null)
						Toast.makeText(getContext(), "收藏失败", Toast.LENGTH_SHORT).show();
					if (!(new DBManager(getContext()).exits(getShop().getShop_id()))) {
						save2db(getShop());
					} else {
						//Toast.makeText(context, "已收藏", Toast.LENGTH_SHORT).show();
						text_name_sub.setText(R.string.haven_collected);
					}
				}
			}

		});

	}

	private void save2db(Shop shop) {

				ContentResolver resolver = getContext().getContentResolver();
				ContentValues values = new ContentValues();
				// System.out.println("baocun11前--------");
				values.put("shop_name", shop.getShopname());
				values.put("address", shop.getAddress());
				values.put("mv_url", shop.getMv_url());
				values.put("logo_url", shop.getLogo_url());
				values.put("msg", shop.getMsg());
				values.put("shop_id", shop.getShop_id());
				values.put("shop_phone", shop.getShop_phone());

				Uri url = Uri
						.parse("content://fang.ContentProvider.MyContentProvider_media/"
								+ ChangLiang.TABLE);
				resolver.insert(url, values);
				// System.out.println("baocun11成功-----------");
			//	Toast.makeText(getContext(), "收藏成功", Toast.LENGTH_SHORT).show();

			}
public Shop getShop() {
		return shop;
	}
	public void setShop(Shop shop) {
		this.shop = shop;
	}
public String getZi_name() {
		return zi_name;
	}
	public void setZi_name(String zi_name) {
		this.zi_name = zi_name;
	}
	public String getZi_mvurl() {
		return zi_mvurl;
	}
	public void setZi_mvurl(String zi_mvurl) {
		this.zi_mvurl = zi_mvurl;
	}
	//这个可能不太合适
	@Override
	public void setOnClickListener(OnClickListener l) {
		// TODO Auto-generated method stub
		super.setOnClickListener(l);
	//	this.currentactivity.finish();
		VideoView mVideoView =	currentactivity.getmVideoView();
		mVideoView.pause();
		Uri uri = Uri.parse(zi_name);
		mVideoView.setVideoURI(uri);
		mVideoView.start();
		mVideoView
				.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
					@Override
					public void onPrepared(MediaPlayer mediaPlayer) {
						// optional need Vitamio 4.0
						mediaPlayer.setPlaybackSpeed(1.0f);
					}
				});

	}

}

上面用到的sub_right_top.xml如下:

<pre name="code" class="html">	<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.aaaa.MainActivity"
    tools:ignore="MergeRootFrame">
	<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" >

    			<!-- <ImageView
    			    android:id="@+id/imageView1"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginLeft="8dp"
    			    android:src="@drawable/mm_title_btn_compose_normal" /> -->

    			<TextView
    			    android:id="@+id/textview1"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="洗菜间"
    			    android:textColor="#fff"
    			    android:textSize="18sp" />
    			    <TextView
    			    android:id="@+id/textview_gone"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="隐藏"
    			    android:textColor="#fff"
    			    android:textSize="18sp"
    			    android:visibility="gone"
    			    /> 

    		</LinearLayout>
    	</RelativeLayout>

下面是动态添加的代码:在他们的父布局一加载的时候开始动态添加:

public class MainTopRightDialog extends Activity {
	// private MyDialog dialog;
	private LinearLayout layout;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_top_right_dialog);
		// dialog=new MyDialog(this);
		layout = (LinearLayout) findViewById(R.id.main_dialog_layout);

		Shop shop1 = (Shop) getIntent().getSerializableExtra("shop_inmvplayer");
		MvplayActivity123 mvplayActivity123 = MvplayActivity123.getinstance();

		List<Map<String, Object>> mv_urls_list = null;
		String mv_urls = shop1.getMv_url();
		if (!mv_urls.equals("null") && mv_urls != null && !mv_urls.equals("")) {

			try {
				mv_urls_list = (List<Map<String, Object>>) new ParseJson2List()
						.ParseJson2List(shop1.getMv_url().toString());
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			mv_urls_list = null;
			return;
		}
		RightTopChildsLayouts layout_childs = null;
		/**
		 * 根据 zi_mvurl 区分是url 还是收藏 若是收藏就为 collect
		 */
		RightTopChildsLayouts layout_collect = null; ///
		for (int i = 0; i < mv_urls_list.size(); i++) {
			layout_childs = new RightTopChildsLayouts(mvplayActivity123, shop1,
					mv_urls_list.get(i).get("_skey").toString(), mv_urls_list.get(i).get("_svalue").toString());
		if (layout_childs != null) {
		 /* 	android:layout_width="wrap_content"
		        	android:layout_height="wrap_content"
		        	android:layout_alignParentRight="true"
		        	android:layout_alignParentTop="true"*/
			layout.addView(layout_childs,130,LinearLayout.LayoutParams.WRAP_CONTENT);
		}

		}
		/**
		 * 添加收藏 项  若收藏过显示已收藏
		 */
		layout_collect=new RightTopChildsLayouts(mvplayActivity123, shop1,
				(new DBManager(this).exits(shop1.getShop_id())?"已收藏":"收藏"), "collect");
			layout.addView(layout_collect,130,LinearLayout.LayoutParams.WRAP_CONTENT);

	/*	layout.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!",
						Toast.LENGTH_SHORT).show();
			}
		});*/
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		finish();
		return true;
	}

}

这个的布局文件(main_dialog_layout)如下:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >

   <RelativeLayout
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:layout_marginTop="46dp"

             >

    	<LinearLayout
    	    android:id="@+id/main_dialog_layout"
	      	android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:layout_alignParentRight="true"
        	android:layout_alignParentTop="true"
        	android:orientation="vertical"
        	android:background="@drawable/title_function_bg" >

   <!--  		<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content"
    		    android:layout_marginBottom="3dp"
    		    >

    			<TextView
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="收藏"
    			    android:textColor="#fff"
    			    android:textSize="18sp" 

    			    />
    		</LinearLayout>
    -->  

       </LinearLayout>

    </RelativeLayout>
</RelativeLayout>

android 动态添加控件并实现每个子控件的点击事件

时间: 2024-08-03 13:40:44

android 动态添加控件并实现每个子控件的点击事件的相关文章

Android 动态添加线性布局(.java文件内) 实现控件按比例分割空间

这里实现 两个 编辑框同一水平上 按1:1分割空间 这里的1:1 比例可以通过 lp1.weight :  1p2.weight  =m:n 实现 { LinearLayout l=new LinearLayout(this); EditText et1 = new EditText(this); //这里只有LinearLayout.LayoutParams 才有 .weight属性 LinearLayout.LayoutParams lp1=new LinearLayout.LayoutPa

Android动态添加布局

//1.利用LayoutInflater的inflate动态加载XML mLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID); LayoutInflater layoutInflater = LayoutInflater.from(context); View view = layoutInflater.inflate(resource--需要加载的XML, null); XML:resource = R.layout.

Android动态添加Fragment

Android动态添加Fragment 效果图如下: 项目结构图如下: Fragment1: package com.demo.dongtaifragment; import android.app.Fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutI

Android 动态添加Spinner(.java文件内实现) 实现 改变spinner 内文字属性

动态添加spinner 控件 Spinner s = new Spinner(this); String []items={"自己定义的要显示的数组"}; my_SpinnerAdapter array_adapter =new my_SpinnerAdapter(this, android.R.layout.simple_spinner_item, items); array_adapter .setDropDownViewResource(android.R.layout.simp

android动态添加view

动态添加一个view. 首先,搞清楚是哪个view(子view),要添加到哪个view(父view)中:其次,子view的属性怎么设置:这两个问题明白了,就容易了. 举个例子:比如要在一个LinearLayout中添加一个Button,  子view是Button,父view是LinearLayout. 子view的属性就是通过LayoutParams来设置的,注意是LinearLayout.LayoutParams,因为子view的高度,宽度这些都是针对父view的,要告诉父view自己要占用

Android动态添加和移除布局

1 package com.hyang.administrator.studentproject; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.widget.Button; 8 import android.widg

Android 动态添加图片 换行

<strong>近在项目中用到动态添加图片,然后换行的实现.刚开始想用GridView,但是没用,什么原因到是忘了.下面我记录一下我的实现方式.</strong> <strong> </strong> 看代码xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andro

android动态添加控件

用LayoutParams:可以设定控件的一些属性 RelativeLayout insertLayout = (RelativeLayout)view1.findViewById(R.id.lay);//lay是一个RelativeLayout 布局的id ImageView img = new ImageView(MainActivity.this);//新建一个ImageView控件 img.setBackgroundColor(Color.parseColor("#ffbbb4"

Android动态添加控件约束位置

用LayoutParams: RelativeLayout insertLayout = (RelativeLayout)view1.findViewById(R.id.screen);//screen是一个RelativeLayout 布局的id ImageView imgApple2 = new ImageView(MainActivity.this); imgApple2.setBackgroundColor(Color.parseColor("#ffb6b4")); Relat