simpleadapterを使用してlistにbuttonのメッセージ応答を追加

2210 ワード

リストのitemにbuttonを追加する場合は、次の点に注意してください.
 
1.xmlファイルでbuttonに2つのプロパティを設定するには
android:focusable="false"   
android:clickable="true"

buttonにこの2つの属性を設定しないと、buttonはitemの焦点を奪い、itemは動かなくなります.itemをクリックしたい場合はitem効果、buttonをクリックしてbutton効果をクリックしたい場合は、buttonのプロパティにこの2つを加えるとokになります.
 
私はsimpleadapterを使っています.buttonかどうかを先に判断する必要があります.コードは以下の通りです.
 
 
listadapter.setViewBinder(new ViewBinder(){

			@Override
			public boolean setViewValue(View view, Object data , String textRepresentation) {
				// TODO Auto-generated method stub
				
				if(view instanceof Button)
				{
					Button button=(Button)view;					
					return true;
				}
				return false;
			}
        	
        });

 
 
次にbuttonに応答時間を設定し、まずadapterのgetviewメソッドを継承します.
コードは次のとおりです.
 
      listadapter=new SimpleAdapter(this,newlist ,R.layout.user,new String[]{"title","group","photo","username"},new int []{R.id.title,R.id.group,R.id.photo,R.id.username}){

			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				// TODO Auto-generated method stub
				if(convertView==null){
				convertView=View.inflate(HTTPRequestActivity.this, R.layout.user, null);
				}
				final Button button=(Button)convertView.findViewById(R.id.group);
		        button.setOnClickListener(new OnClickListener(){

					@Override
					public void onClick(View arg0) {
						// TODO Auto-generated method stub
						String groupname=(String)button.getText();
						
					}
		        });
	return super.getView(position, convertView, parent);
			}
        	
        };
 
 
メッセージ応答を追加することができます.注意:このbuttonのメッセージ応答はoncreate()関数で定義できません.buttonはitemのレイアウトファイルで定義されているため、すべてのitemのbuttonは1つのbuttonを共有しています.idは同じです.oncreateで定義すると、各itemのbuttonに定義することになります.これは不可能で、buttonオブジェクトを取得できないため、ポインタが間違っています.getviewでのみbuttonオブジェクトが得られます.