ListView는 커스텀어댑터(CustomArrayAdapter)와 연결되어있구요

커스텁어댑터는 클래스ArrayList와 연결되어있습니다(ArrayList<클래스명>)


UserList.java 에 리스트뷰가 존재하며,

UserListArrayAdapter.java에 커스텀어댑터를 정의해놓았습니다.


현재는 UserList.java의 리스트뷰에서 각 아이템을 클릭할 경우

인텐트를 통해 UserInfo.java의 액티비티를 실행하고, 데이터를 주고받습니다.



이 작업을 리스트뷰의 리스트아이템에 만들어진 버튼클릭이벤트에 주고싶은데,

상세내용은 코드에서 설명해드리겠습니다 ㅠㅠ




UserList.java입니다


public class UserList extends ListActivity{

private ArrayList<User> Userlist;

private ArrayAdapter<String> adapter;

private UserListArrayAdapter ulaa = null;


int listposition;


@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.userlist);


Userlist = new ArrayList<User>();

//Userlist = User객체 ArrayList


ulaa = new UserListArrayAdapter(this, R.layout.userlist_row, Userlist);

setListAdapter(ulaa);

//커스텀ArrayAdapter선언/초기화, 본Activity Adapter로 ulaa지정


//리스트뷰의 각 아이템에서 버튼 클릭시 실행하고싶은 이벤트 1

//리스트뷰가 존재하는 UserList에서 onActivityResult를 실행하고싶습니다

@Override

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

super.onActivityResult(requestCode, resultCode, data);

//UserInfo를 보고 나왔을 때(간략정보 업데이트)

if(resultCode==RESULT_OK){

if(requestCode==2){

String CardName = data.getStringExtra("CardName");


Userlist.get(listposition).putCardName(CardName);


ulaa.notifyDataSetChanged();

}

}

}

}


//리스트아이템 클릭했을 때

//리스트뷰의 각 아이템에서 버튼 클릭시 실행하고싶은 이벤트 1

//UserList에서 인텐트를 통해 UserInfo액티비티를 실행하며, putExtra로 데이터를 전달하고,

//실행하고싶은 이벤트1의 onActivityResult를 통해 getStringExtra로 데이터를 받고싶습니다

//여기서 전달하는 데이터는, UserList의 데이터입니다.

@Override

protected void onListItemClick (ListView l, View v, int position, long id){

//그냥 클릭때

super.onListItemClick(l, v, position, id);

User CurUser = (User)l.getItemAtPosition(position);


String ID = CurUser.getID();


Intent UserInfoIntent = new Intent(UserList.this, UserInfo.class); //UserList에서 전달한다는걸 알려줍니다

UserInfoIntent.putExtra("UserID", ID); //UserList내의 정보를 putExtra로 전달합니다

listposition = position;

startActivityForResult(UserInfoIntent, 2); //호출한 액티비티의 결과를  UserList로 되돌려받습니다

}


class User{

private String ID;

private String CardName;


public User(String _ID, String _CardName){

this.ID = _ID;

this.CardName = _CardName;

}


public String getID(){

return ID;

}

public String getCardName(){

return CardName;

}

public void putID(String _ID){

this.ID = _ID;

}

public void putCardName(String _CardName){

this.CardName = _CardName;

}

}



현재는 리스트의 각 아이템을 클릭시 데이터를 전달하고, 받아오게 되어있으며

(Intent를 통한 데이터전달, 액티비티 시작, 데이터수신)

이와 같은 기능을 리스트 각 아이템의 버튼을 통해서 하고싶습니다...ㅠㅠ




UserListArrayAdapter.java(커스텀어댑터 코드)입니다

UserListArrayAdapter라는 커스텀어댑터가 User객체를 사용하는 ArrayAdapter를 상속합니다

public class UserListArrayAdapter extends ArrayAdapter<User>{

private ArrayList<User> mUser;

private Context mContext;

private int mResource;

private LayoutInflater mInflater;


어댑터에서는 User객체 ArrayList를 인자로 받습니다

public UserListArrayAdapter(Context context, int LayoutResource, ArrayList<User> User){

super(context, LayoutResource, User);

this.mUser = User;

this.mContext = context;

this.mResource = LayoutResource;

this.mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}


getView에서는 받아온 User객체를 대입한 mUser에서 데이터를 받아 사용합니다

@Override

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

final User mCurUser = mUser.get(position);


if(convertView == null)

convertView = mInflater.inflate(mResource, null);


TextView CardName = (TextView)convertView.findViewById(R.id.UserList_CardName);

TextView GoUserInfoBtn = (TextView)convertView.findViewById(R.id.GoUserInfoBtn);

//이 텍스트뷰에 클릭이벤트를 주어, 위에서 기술한 두가지 일을 하고싶습니다.

//정리하자면, UserList의 리스트뷰 -> UserInfo로의 인텐트를 통한 액티비티실행과 정보 송수신은 가능한데,

//(리스트뷰의 OnListItemClick이벤트로 가능했습니다.)

//

//UserListArrayAdapter에서 생성한 버튼을 이용해서

// UserList의 리스트뷰 -> UserInfo로의 인텐트를 통한 액티비티실행과 정보 송수신이 하고싶습니다.


CardName.setText(mCurUser.getCardName());


return convertView;

}

}




지금까지는 정말 열심히 여기저기 찾아서 해보았는데,

각 리스트뷰 아이템에 버튼을 만들고 이벤트를 지정하는것 까지는 찾았는데

그 버튼이 속한 리스트뷰가 속한 액티비티의 정보를 인텐트를 통해 다른 액티비티로 전달하고 받는것을 전혀 모르겠습니다


도움 부탁드립니다 ㅠㅠ