안드로이드 개발 질문/답변
(글 수 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값을 받아서 그값을 더하는 방법이 있구요..
다른 방법은 뷰홀더로 체크박스를 묶어서 뷰홀더의 아이템클릭리스너를 적용시켜 핸들러로 값을 받을 수 있겠네요..