안드로이드 개발 질문/답변
(글 수 45,052)
버튼을 클릭하면 Dialog가 생성되면서 Dialog에는 ListView와 확인버튼, 취소버튼이 있도록 구성했습니다.
ListView는 CheckBox와 TextView 2개로 구성되어있구요..
여기서 ListView에서 체크박스를 클릭하고 확인버튼을 누르면 체크된 값을 가지고 오고 싶은데요..
어떻게 할 수 있을까요?
그냥 List라면 ListActivity 상속 받아서 CHOICE_MODE_MULTIPLE 이용하면 될것 같은데
제가 하고 싶은거는 Dialog에서 하고 싶은거거든요..
소스 첨부 하니 조언 좀 해주세요~
그리고 체크된 값들이 스크롤 되면서 멋대로 체크가 해제되더라구요..
요것도 질문 찾아보면서 이것저것 해봤는데 안되더라구요.. 요것도 같이 봐주시면 감사하겠습니다~
Main.java
public class Main extends Activity { public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.newmail); Button btnList = (Button) findViewById(R.id.btnList); btnList.setOnClickListener(new Button.OnClickListener(){ public void onClick(View view) { sampleDialog().show(); } }); ) protected Dialog sampleDialog(String msg) { return new AddressDialog(this); } }
AddressDialog.java
public class AddressDialog extends Dialog { Context context; private ArrayList<MyAddress> addList = new ArrayList<MyAddress>(); public AddressDialog(Context context) { super(context); this.context = context; } public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.addresslist); setTitle("주소록"); ListView dialogListView = (ListView) findViewById(R.id.address_listview);
String[] name = new String[]{"이순신", "홍길동", "김유신", "세종대왕", "윤봉길", "안중근"}; String[] address = new String[]{"011-145-2542", "010-585-5685", "016-864-6831", "017-555-4241", "019-415-5487", "018-458-5341"};
for(int i=0; i<name.length; i++) { addList.add(new MyAddress(name[i], address[i])); } MyAddressAdapter myAddAdapter = new MyAddressAdapter(context, R.layout.addresslist_item, addList);
dialogListView.setAdapter(myAddAdapter); dialogListView.setItemsCanFocus(true); // 확인버튼 Button btnAddSend = (Button) findViewById(R.id.btnAddSend); btnAddSend.setOnClickListener(new Button.OnClickListener() { public void onClick(View view) {
} }); // 취소버튼 Button btnAddCancle = (Button) findViewById(R.id.btnAddCancle); btnAddCancle.setOnClickListener(new Button.OnClickListener() { public void onClick(View view) {
} }); } }
MyAddressAdapter.java
public class MyAddressAdapter extends ArrayAdapter { private ArrayList<MyAddress> items; private Context context; public MyAddressAdapter(Context context, int textViewResourceId, ArrayList<MyAddress> items) { super(context, textViewResourceId, items); this.context = context; this.items = items; } public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.addresslist_item, null); MyAddress ma = items.get(position); if( ma != null ){ TextView name = (TextView)v.findViewById(R.id.addresslist_name); TextView address = (TextView)v.findViewById(R.id.addresslist_address);
if( name != null ) { name.setText(ma.getName()); } if( address != null ) { address.setText(ma.getAddress()); } }
return v; } }
addresslist.xml
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="6dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="250dip"> <ListView android:id="@+id/address_listview" android:layout_width="fill_parent" android:layout_height="250dip" android:layout_weight="1.0" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"> <Button android:id="@+id/btnAddSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="선택"/> <Button android:id="@+id/btnAddCancle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="취소"/> </LinearLayout>
</LinearLayout>
addresslist.xml
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="6dip" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="6dip" > <CheckBox android:id="@+id/addresslist_chk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dip"/> <TextView android:id="@+id/addresslist_name" android:layout_width="80dip" android:layout_height="wrap_content" android:paddingLeft="5dip" android:paddingRight="15dip" android:textSize="15dip" android:text="EYKim"/> <TextView android:id="@+id/addresslist_address" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="5dip" android:textSize="15dip" android:text="autumnus"/> </LinearLayout> </LinearLayout>
안드로이드 펍 Q&A 게시판을 비롯해서 많은 분들 블로그도 보고 책도 보고 했는데도 잘 모르겠어서 여쭙는거니까
보시고 많이 가르쳐 주세요~ ^^
이거 같은 경우에는 리스트를 클릭하면 이벤트를 감지하는 onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)에서 체크박스를 체크하고 언체크하는 boolean값을 받아서 그값을 더하는 방법이 있구요..
다른 방법은 뷰홀더로 체크박스를 묶어서 뷰홀더의 아이템클릭리스너를 적용시켜 핸들러로 값을 받을 수 있겠네요..