ListViewにボタンを追加し、ItemViewを追加する操作を動的に削除

4690 ワード

ボタンを追加するには、Adapterをカスタマイズし、Button ViewのsetTag()メソッドを使用して、Buttonが属する場所をtagに設定する必要があります.
動的にItemViewを削除するには、まずAdapterにバインドされているデータソースを調整し、AdapterのnotifyDataSetChanged()メソッドを呼び出す必要があります.
 
以下は実装の一例である
 
package com.jason.joysmsyd;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



import android.app.ListActivity;

import android.content.Intent;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.view.View.OnClickListener;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;



public class SendMain extends ListActivity implements OnClickListener{



	Button buttonMessage,buttonContact,buttonHistory;

	EditText textMessage;

	

	List<Map<String,String>> contacts = new ArrayList<Map<String,String>>();

	

	

	

	@Override

	protected void onCreate(Bundle savedInstanceState) {

		// TODO Auto-generated method stub

		super.onCreate(savedInstanceState);

		this.requestWindowFeature(Window.FEATURE_NO_TITLE);

		

		this.setContentView(R.layout.layout_send);

		

		buttonMessage = (Button) this.findViewById(R.id.ButtonMessage);

		buttonContact = (Button) this.findViewById(R.id.ButtonContact);

		buttonHistory = (Button) this.findViewById(R.id.ButtonHistory);

		

		textMessage = (EditText)this.findViewById(R.id.EditTextMessage);

		textMessage.setText(this.getIntent().getExtras().getString("message"));

	

	}



	public void onClick(View v) {

		// TODO Auto-generated method stub

		switch(v.getId()){

		case R.id.ButtonMessage:

			this.finish();

			break;

		case R.id.ButtonContact:

		{

			Intent intent = new Intent();

			intent.setAction("com.jason.action.contact");

			this.startActivityForResult(intent, 0);

		}

			break;

		case R.id.ButtonHistory:

		{

			Intent intent = new Intent();

			intent.setAction("com.jason.action.history");

			this.startActivityForResult(intent, 1);

		}

			break;

		}

		

	}



	

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {

		// TODO Auto-generated method stub

		super.onActivityResult(requestCode, resultCode, data);

		 if (requestCode == 0 && resultCode == RESULT_OK) {

			this.getcontactFromString(data.getExtras().getString(

					UserSelectActivity.RETURN_LIST));

			bindDataToList();

		}

	}



	private void getcontactFromString(String data) {

		if (data == null || data.length() == 0) {

			return;

		}



		

		String[] arrayContact = data.split("#");

		for (String singleContact : arrayContact) {

			if (singleContact != null && singleContact.length() > 0) {

				String[] props = singleContact.split(":");

				if (props.length == 2) {

					Map<String,String> contact = new HashMap<String,String>();

					contact.put("name", props[0]);

					contact.put("phone", props[1]);

					contacts.add(contact);



				}

			}



		}

		

	}

	

	private void bindDataToList(){

		this.setListAdapter(new MyAdapter());

	}

	

	public class MyAdapter extends BaseAdapter{



		public int getCount() {

			// TODO Auto-generated method stub

			return contacts.size();

		}



		public Object getItem(int position) {

			// TODO Auto-generated method stub

			return contacts.get(position);

		}



		public long getItemId(int position) {

			// TODO Auto-generated method stub

			return position;

		}





		public View getView(int position, View convertView, ViewGroup parent) {

			// TODO Auto-generated method stub

			LayoutInflater inflater = SendMain.this.getLayoutInflater();

			 final View view = inflater.inflate(R.layout.layout_user_item, null);

			 final TextView textPhone = (TextView) view.findViewById(R.id.text1);

			 final TextView textName = (TextView) view.findViewById(R.id.text2);

			 Button button = (Button)view.findViewById(R.id.buttonDelete);

			

			 textPhone.setText(contacts.get(position).get("phone"));

			 textName.setText(contacts.get(position).get("name"));

			 

			 button.setTag( position);

			 

			 button.setOnClickListener(new OnClickListener(){



				public void onClick(View v) {

					// TODO Auto-generated method stub

					int position = Integer.parseInt(v.getTag().toString());

					contacts.remove(position);

					MyAdapter.this.notifyDataSetChanged();

					

//					SendMain.this.getListView().refreshDrawableState();

				}});

			 

			 

			 

			

			return view;

		}

		

	}

}