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;
}
}
지금까지는 정말 열심히 여기저기 찾아서 해보았는데,
각 리스트뷰 아이템에 버튼을 만들고 이벤트를 지정하는것 까지는 찾았는데
그 버튼이 속한 리스트뷰가 속한 액티비티의 정보를 인텐트를 통해 다른 액티비티로 전달하고 받는것을 전혀 모르겠습니다
도움 부탁드립니다 ㅠㅠ




결론적으로는 ListView의 각 position을 클릭했을때 이벤트와 CustionView를 이용해서 만든 ListView안의 Button들에 대한 이벤트 처리를 Intent를 통해서 각각 하고 싶다는 말씀이신가요?