2013-09-26 12 views
6

hello Stworzyłem listę z zaznaczonymi polami wyboru ... ale nie wiem, jak uzyskać tekst pola wyboru, które są zaznaczone .. tutaj jest kod activity_main.xmlAndroid otrzyma tekst wszystkich zaznaczonych pól wyboru na liścieView

<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> 

inny układ, który ma wyboru, aby pokazać w main.list_item.xml listview

<?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> 

i jest to klasa, która rozszerza 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; 
    } 
} 

i to jest moja klasa główną działalność

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; 
    } 

} 

i wreszcie mam wszystkie kraje zapisywane w pliku countries.xml na folderze wartości

<?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> 

pokazuje pola wyboru w ListView teraz Chcę uzyskać tekst pól wyboru, które są zaznaczone i pokazać toast za pomocą przycisku (do przetestowania), a następnie postępowałem zgodnie z samouczkiem na temat książki kucharskiej dla Androida autorstwa oreilly, ale nadal nie wiem, jak ustawić słuchacza

Odpowiedz

18

Dodaj wewnątrz CheckboxAdapter.java

ArrayList<String> selectedStrings = new ArrayList<String>(); 

Następnie wewnątrz metody 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()); 
       } 

      } 
     }); 

Napisz getter który powróci selectedStrings

ArrayList<String> getSelectedString(){ 
    return selectedStrings; 
} 
+1

Dzięki jego pracy :) –

+0

Problem z rozwiązaniem polega na tym, że nie zachowuje on kolejności pól wyboru –

+0

w środku onCheckedChanged użyj przyciskuView.getText zamiast tv.getText – temirbek

1

Na podejściu może być zdać własny obiekt do Arrayadapter:

class ArrayItem{ 
    private String text; 
    private boolean checked; 
    ... (getter/setter) 
} 

i po prostu zużyty tablicę z powrotem z Arrayadapter i przeczytać.

Arrayadaper...{ 

    public ArrayList<ArrayItem> getList(){ 
     return this.arrayList; 
    } 

    public View getView(int position,View convertView,ViewGroup parent){ 
     ArrayItem item = this.arrayList.get(position) 
     convertView = mInflater.inflate(mViewResourceId, null); 

     CheckBox tv = (CheckBox)convertView.findViewById(R.id.checkBox1); 
     tv.setCheckChangeListener... //item.setChecked(true:false) 
     tv.setText(mStrings[position]); 

     return convertView; 
    } 
} 


} 

Można pętli listy i po prostu manipulować elementy gdzie sprawdzonych == true

nadzieję, że to pomaga.

13

Może być to będzie pomagał Ci:

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(); 
     } 
    } 
+0

Naprawdę podoba mi się ten! –

+0

@Saif Hamed Działa dla mnie ... –

+0

To działa tylko dla widocznych elementów na liście. – c0m4

0
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); 
       } 
Powiązane problemy