2012-01-21 73 views
1

我有一個列表視圖中左的文本和複選框在右側列表視圖side.My顯示從中我comes.Now希望當我點擊複選框,並用按鈕來保存它得到的地址與SMS的身體和地址收件箱.my複選框是可點擊的,我的列表視圖不能被點擊,因爲它顯示爲文本。 我的代碼如下:如何獲取複選框中的listview值?

public class SMSInbox extends Activity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.inbox); 

     final ListView lViewSMS = (ListView) findViewById(R.id.list); 

     if(fetchInbox()!=null) 
     { 
      String[] from = new String[]{}; 

      int to = R.id.text1; 
      ArrayAdapter adapter = new ArrayAdapter(this,R.layout.row,to,fetchInbox()); 

      lViewSMS.setAdapter(adapter); 
     } 


     }  


    public ArrayList fetchInbox() 
    { 
     ArrayList sms = new ArrayList(); 

     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor cursor = getContentResolver().query(uriSms, new String[]{"_id", "address", "date", "body"},null,null,null); 

     cursor.moveToFirst(); 
     while (cursor.moveToNext()) 
     { 
       String address = cursor.getString(1); 
       String body = cursor.getString(3); 

       System.out.println("======> Mobile number => "+address); 
       System.out.println("=====> SMS Text => "+body); 

       sms.add("Address=> "+address+"\n SMS => "+body); 
     } 
     return sms; 

    } 


     } 

我的XML代碼inbox.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
<Button android:id="@+id/get_view_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Get CheckBox" /> 
<ListView 
android:id="@+id/list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
/> 
</LinearLayout> 

我row.xml代碼:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" > 

<TextView 
android:id="@+id/text1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dip"> 
</TextView> 

<CheckBox 
android:id="@+id/check" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentRight="true" 
android:layout_marginLeft="4px" 
android:layout_marginRight="10px" > 
</CheckBox> 

</RelativeLayout> 

查看代碼:

public class InteractiveArrayAdapter extends ArrayAdapter<Model> { 

private final List<Model> list; 
private final Activity context; 

public InteractiveArrayAdapter(Activity context, List<Model> list) { 
    super(context, R.layout.row, list); 
    this.context = context; 
    this.list = list; 
} 

static class ViewHolder { 
    protected TextView text; 
    protected CheckBox checkbox; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = null; 
    if (convertView == null) { 
     LayoutInflater inflator = context.getLayoutInflater(); 
     view = inflator.inflate(R.layout.row, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) view.findViewById(R.id.text1); 
     viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
     viewHolder.checkbox 
       .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         Model element = (Model) viewHolder.checkbox 
           .getTag(); 
         element.setSelected(buttonView.isChecked()); 



        } 
       }); 
     view.setTag(viewHolder); 
     viewHolder.checkbox.setTag(list.get(position)); 

    } else { 
     view = convertView; 
     ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 

    } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.text.setText(list.get(position).getName()); 
    holder.checkbox.setChecked(list.get(position).isSelected()); 
    return view; 
}} 

Model.java

public class Model { 
private String name; 
private boolean selected; 

public Model(String name) { 
    this.name = name; 
    selected = false; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public boolean isSelected() { 
    return selected; 
} 

public void setSelected(boolean selected) { 
    this.selected = selected; 
}} 

讓我知道該怎麼做才能從smsinbox.java的地址中複選框單擊。並且如何確認是否複選框獲取地址?

請幫我解決這個問題。

+0

男人,你從來沒用過你InteractiveArrayAdapter,你已經創造了它,但使用普通ArrayAdapter ......我在這裏失去了一些東西?......你會使用它們(InteractiveArrayAdapter或ArrayAdapter)的哪一個? –

+0

讓我清楚如何在代碼格式中使用InteraractiveArrayAdapter而不是ArrayAdapter。 – divya

+0

代替使用 「ArrayAdapter適配器=新ArrayAdapter(此,R.layout.row,於fetchInbox());」你將使用「InteractiveArrayAdapter adapter = new InteractiveArrayAdapter(this,model);」 .....順便說一句,兩者都是正確的,但問題是,你認爲你正在使用一些東西(InteractiveArrayAdapter),而實際上你不是(因爲你正在使用ArrayAdapter)。 –

回答

0

我有同樣的問題,看看我的問題以及答案。

Custom listView multiselection

萬事如意

+0

Richa,我不能得到,因爲我是新的android.explain我我必須改變,以獲得listview值複選框click.I看到你的code.There你有OnItemClickListener所以你可以點擊你的listview.Then它可以響應,我們可以通過toast確認,但我顯示列表視圖出現在textview.I不能單擊列表視圖的價值,因爲它只出現在文本中。但我可以點擊複選框。如何使用toast.any實現checkbox的響應理念? – divya

+0

確保行下的ur視圖是focusable =「false」,clickable =「false」 – Richa

+0

我把false放在xml中,就像你說的。複選框中的第六個問題,無法選擇checkbox.Atleast我想通過toast檢查複選框點擊 – divya

0

在適配器中添加這個方法:

首先對所選項目的列表定義新ArrayList

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

創建方法退貨清單:

/** 
    * create this method for return new value in list item selected 
    * @return 
    */ 
    private List<String> getSelectedString(){ 
     return itemSelected; 
    } 
在複選框條件

,做類似下面的代碼:

holder.cbItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
       if(b){ 
        itemSelected.add(itemName); 

        String jsonString = gson.toJson(getSelectedString()); 
        edit.putString(Constants.KEY_SHARED,jsonString); 
        edit.commit(); 
       }else{ 
        itemSelected.remove(itemName); 
        String jsonString = gson.toJson(getSelectedString()); 
        edit.putString(Constants.KEY_SHARED,jsonString); 
        edit.commit(); 
       } 
      } 
     }); 

,如果你仍然感到困惑如何的過程中,我發現了一個有用的文章,請參閱this article。也許你會找到你需要的。希望能幫助到你。