こんにちは、チェックボックスを含むリストビューを作成しました...しかし、選択されているチェックボックスのテキストを取得する方法がわかりません。ここにactivity_main.xmlのコードがあります
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/LinearLayout1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:gravity="top"
Android:orientation="vertical"
tools:context=".MygamesActivity" >
<ListView
Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_marginTop="20dp" />
</LinearLayout>
リストビューmain.list_item.xmlに表示するチェックボックスを持つ別のレイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<CheckBox
Android:id="@+id/checkBox1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="CheckBox"
/>
</LinearLayout>
これはarrayadapterを拡張するクラスです
package com.wasiff.listview;
import Android.content.Context;
import Android.content.res.TypedArray;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.CheckBox;
import Android.widget.ImageView;
import Android.widget.TextView;
public class CheckboxAdapter extends ArrayAdapter<String> {
private LayoutInflater mInflater;
private String[] mStrings;
private TypedArray mIcons;
private int mViewResourceId;
public CheckboxAdapter(Context ctx,int viewResourceId,String[] strings){
super(ctx,viewResourceId,strings);
mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mStrings = strings;
mViewResourceId = viewResourceId;
}
public int getCount(){
return mStrings.length;
}
public String getItem(int position){
return mStrings[position];
}
public long getItemId(int position){
return 0;
}
public View getView(int position,View convertView,ViewGroup parent){
convertView = mInflater.inflate(mViewResourceId, null);
CheckBox tv = (CheckBox)convertView.findViewById(R.id.checkBox1);
tv.setText(mStrings[position]);
return convertView;
}
}
これは私のmainActivityクラスです
package com.wasiff.listview;
import Android.app.ListActivity;
import Android.content.Context;
import Android.content.res.Resources;
import Android.content.res.TypedArray;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.View;
import Android.widget.AdapterView.OnItemClickListener;
import Android.widget.Button;
import Android.widget.ListAdapter;
import Android.widget.ListView;
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context ctx = getApplicationContext();
Resources res = ctx.getResources();
String[] options = res.getStringArray(R.array.countrynames);
setListAdapter((ListAdapter) new CheckboxAdapter(ctx,R.layout.main_list_item,options));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
そして最後に、すべての国をvaluesフォルダーのcountries.xmlファイルに保存しました
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="countrynames" translatable="false">
<item>Bhutan</item>
<item>Colombia</item>
<item>India</item>
<item>Pakistan</item>
<item>Australia</item>
<item>Srilanka</item>
<item>England</item>
</string-array>
</resources>
これは、listViewのチェックボックスを表示します。チェックしたチェックボックスのテキストを取得し、ボタンをクリックしてトーストに表示する(テストする)には、Android = oreillyによるクックブックですが、まだリスナーを設定する方法がわかりません
CheckboxAdapter.Java内に追加
ArrayList<String> selectedStrings = new ArrayList<String>();
次にgetViewメソッド内
tv.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
selectedStrings.add(tv.getText().toString());
}else{
selectedStrings.remove(tv.getText().toString());
}
}
});
SelectedStringsを返すゲッターを作成する
ArrayList<String> getSelectedString(){
return selectedStrings;
}
これはあなたを助けるでしょう:
CheckBox cb;
ListView mainListView = getListView();
for (int x = 0; x<mainListView.getChildCount();x++){
cb = (CheckBox)mainListView.getChildAt(x).findViewById(R.id.myCheckBox);
if(cb.isChecked()){
doSomething();
}
}
SparseBooleanArray checked = listView1.getCheckedItemPositions();
ArrayList<String> selectedItems = new ArrayList<String>();
for (int i = 0; i < len; i++) {
if (checked.get(i))
selectedItems.add((String) adapter.getItem(i));
}
String[] outputStrArr = new String[selectedItems.size()];
for (int i = 0; i < selectedItems.size(); i++) {
outputStrArr[i] = selectedItems.get(i);
}
ListView listView = findViewById(R.id.listView);
listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
arrayAdapter = new ArrayAdapter(this,Android.R.layout.simple_list_item_checked,userlist);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
CheckedTextView checkedTextView= (CheckedTextView)view;
if(checkedTextView.isChecked()){
Log.i("info","CHECKED");
}
else{
Log.i("info","UNCHECKED");
}
}
});