笔记48--ListView点击item,显示Dialog,选择Dialog,更改item的值

整个实现的效果就是淘宝的提交订单页面,选择快递类型。上源码

一、核心:理解ListView绘制原理。

1)系统在ListView绘制前,先调用getCount()方法来获取item的个数。之后每绘制一个item就会调用一次getView方法。

2)ListView显示的数据是适配器中传入的数据,所以要想更改item中某项的值,不能通过直接更改item中控件的值来实现,必须通过更改传入的数据的值来实现,因为重绘ListView时,也是调用getView方法,如果传入的数据没变,重绘会恢复原来的值。

3)改变传入的值后,记得调用notifyDataSetChanged()。

二、动态设置Dialog(比如更改Dialog中显示的值,或者Dialog中某些控件响应点击事件)时,要获取Dialog中控件并改变它,Dialog必须通过这种方式:

View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
dialog.setContentView(view1);
TextView tv1=(TextView) view1.findViewById(R.id.tv1);
tv1.setText("aaa");

否则无法实现。下面是错误的方式:

dialog.setContentView(R.layout.dialog);
View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
TextView tv1=(TextView) view1.findViewById(R.id.tv1);
tv1.setText("aaa");
三、全在getView中实现。

public View getView(final int position, View convertView, ViewGroup parent) {
	// TODO 自动生成的方法存根
	View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);
	TextView tv=(TextView) view.findViewById(R.id.tv);
	tv.setText(strList.get(position));
	tv.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {
	<span style="white-space:pre">	</span>	// TODO 自动生成的方法存根
			final Dialog dialog=new Dialog(MainActivity.this);
			View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
			dialog.setCancelable(true);
			dialog.setCanceledOnTouchOutside(true);
			dialog.setTitle("xuanze");
			dialog.setContentView(view1);
			dialog.setContentView(R.layout.dialog);
					
			TextView tv1=(TextView) view1.findViewById(R.id.tv1);
			TextView tv2=(TextView) view1.findViewById(R.id.tv2);
			TextView tv3=(TextView) view1.findViewById(R.id.tv3);
			tv2.setText("aaa");
					
			if(position==1){
				tv1.setVisibility(View.GONE);
			}

			tv1.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO 自动生成的方法存根
					strList.set(0, "111");
					notifyDataSetChanged();
					dialog.dismiss();
				}
			});

			tv2.setOnClickListener(new OnClickListener() {
	<span style="white-space:pre">		</span>	@Override
<span style="white-space:pre">	</span>			public void onClick(View v) {
					// TODO 自动生成的方法存根
					strList.set(1, "222");
					notifyDataSetChanged();
					dialog.dismiss();
				}
			});
		}
	});
	return view;
}




你可能感兴趣的:(笔记48--ListView点击item,显示Dialog,选择Dialog,更改item的值)