노트 48 - ListView item 클릭, Dialog 표시, Dialog 선택, item 값 변경

2749 단어
전체적인 효과는 타오바오의 주문 제출 페이지에서 택배 유형을 선택하는 것이다.소스 코드
1. 핵심: ListView 그리기 원리를 이해한다.
1) 시스템은 ListView를 그리기 전에 getCount () 방법을 사용해서 item의 개수를 가져옵니다.다음에 item을 그릴 때마다 getView 방법을 사용합니다.
2) ListView가 표시하는 데이터는 어댑터에서 전송된 데이터이기 때문에 item에서 어떤 항목의 값을 변경하려면 item에서 컨트롤의 값을 직접 변경하여 실현할 수 없다. 전송된 데이터의 값을 변경해서 실현해야 한다. ListView를 다시 그릴 때도 getView 방법을 사용하기 때문에 전송된 데이터가 변하지 않으면 다시 그릴 때 원래의 값을 복원할 수 있다.
3) 들어오는 값을 변경한 후 notify DataSetChanged () 를 호출하는 것을 잊지 마십시오.
둘째, 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;
}

좋은 웹페이지 즐겨찾기