如何使用复选框以特定的不发送选定的邮件? [英] How to send selected messages using checkbox to a particular no?

查看:85
本文介绍了如何使用复选框以特定的不发送选定的邮件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第一个即时获取所有邮件到我的应用程序商店可以在列表视图和我是从列表视图中使用复选框选择的消息,并希望发送这些选定的短信到一个单一的数字,为predefined ,并希望为使用选择短信作为消息的身体被发送给单身没有。,但在问题是在发送的邮件中包含完整的列表视图消息不是选择之一。所以,请人的纠正我在哪里,我错在code 作为我想发送唯一入选的消息不是完整的列表视图项(消息)


 公共类MainActivity扩展活动实现OnItemClickListener,OnClickListener {

按钮发送;
ListView控件listViewSMS;
光标光标;
SMSListAdapter smsListAdapter;
上下文语境;
共享preferences preFS = NULL;
ArrayAdapter< SMSListModel>适配器;
名单< SMSListModel>名单=新的ArrayList< SMSListModel>();
TextView的textViewSMSSender,textViewSMSBody;
INT I;
诠释计数= 0;
@覆盖
保护无效的onCreate(包savedInstanceState)
{
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    上下文=这一点;
    listViewSMS =(ListView控件)findViewById(R.id.lvSMS);

    发送=(按钮)findViewById(R.id.btnproperty);
    send.setOnClickListener(本);

    textViewSMSSender =(TextView中)findViewById(R.id.tvSMSSend);
    textViewSMSBody =(TextView中)findViewById(R.id.tvSMSBody);

    光标= getContentResolver()查询(Uri.parse(内容://短信/收件箱),NULL,NULL,NULL,NULL);。

    smsListAdapter =新SMSListAdapter(这一点,getModel());
    listViewSMS.setAdapter(smsListAdapter);
    listViewSMS.setOnItemClickListener(本);


}
@覆盖
公共无效onItemClick(适配器视图<>为arg0,视图V,INT ARG2,长ARG3){
    TextView的标签=(TextView中)v.getTag(R.id.tvSMSSend);
    复选框复选框=(复选框)v.getTag(R.id.cbSelect);
    Toast.makeText(v.getContext(),label.getText()的toString()++ isCheckedOrNot(复选框),Toast.LENGTH_LONG。).show();
}

私人字符串isCheckedOrNot(复选框复选框){
    如果(checkbox.isChecked())
        返回检查;
    其他
        重返不检查;
}

私人列表< SMSListModel> getModel(){

    如果(cursor.getCount()大于0){
        对于(i = 0; I< cursor.getCount();我++){
            如果(cursor.moveToPosition(i))的{
                list.add(新SMSListModel(cursor.getString(cursor.getColumnIndex("address")),cursor.getString(cursor.getColumnIndex("body"))));
            }
        }
    }


    返回列表;
}
@覆盖
公共无效的onClick(视图v){



    如果(V ==发送){
        mDialog();

    }



公共无效mDialog(){



     //显示用所选的短信对话
     AlertDialog对话框=新AlertDialog.Builder(上下文).create();
     dialog.setTitle(消息应用程序);
     dialog.setIcon(android.R.drawable.ic_dialog_info);
     dialog.setMessage(计数);
     dialog.setButton(DialogInterface.BUTTON_POSITIVE,OK,
             新DialogInterface.OnClickListener(){
         公共无效的onClick(DialogInterface对话,诠释其)
         {
             串PHONENO =111;
             如果(则为list.size()大于0){
                 对于(i = 0; I<则为list.size();我++){
                     如果(list.get(ⅰ).isSelected()){

                         尝试{
                             SmsManager的SmsManager的= SmsManager.getDefault();
                             StringBuilder的建设者=新的StringBuilder();
                             对于(SMSListModel号码:名单){
                                 builder.append(p.toString());
                                 builder.append('\ N');
                             }
                            字符串短信= builder.toString();
                             smsManager.sendTextMessage(PHONENO,空,短信,NULL,NULL);
                          Toast.makeText(getApplicationContext(),短信已发送!,Toast.LENGTH_LONG).show();

                         }

                         赶上(例外五){
                             Toast.makeText(getApplicationContext(),短信faild,请稍后重试!,Toast.LENGTH_LONG).show();
                             e.printStackTrace();

                         }
                         dialog.dismiss();

                 }
              }
            }
         }
     });

     dialog.setButton(DialogInterface.BUTTON_NEGATIVE,取消,
            新DialogInterface.OnClickListener(){

                    @覆盖
                    公共无效的onClick(DialogInterface对话,诠释它){
                        Toast.makeText(getApplicationContext(),短信没有发送,Toast.LENGTH_LONG).show();
                        dialog.dismiss();

                    }
                });
     dialog.show();

}
 


 公共类SMSListAdapter扩展ArrayAdapter< SMSListModel> {

私人最终名单,其中,SMSListModel>清单;
私人最终活动mContext;
布尔checkAll_flag = FALSE;
布尔checkItem_flag = FALSE;

公共SMSListAdapter(活动背景下,列表与LT; SMSListModel>名单)
{
    超(背景下,R.layout.listview_each_item,清​​单);
    mContext =背景;
    this.list =清单;
}

静态类ViewHolder {
    受保护的TextView textAddress;
    受保护的TextView的TextBody;
    保护复选框复选框;
}

@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){

    ViewHolder viewHolder = NULL;
    如果(convertView == NULL){
        LayoutInflater充气= mContext.getLayoutInflater();
        convertView = inflator.inflate(R.layout.listview_each_item,NULL);
        viewHolder =新ViewHolder();
        viewHolder.textAddress =(TextView中)convertView.findViewById(R.id.tvSMSSend);
        viewHolder.textBody =(TextView中)convertView.findViewById(R.id.tvSMSBody);
        viewHolder.checkbox =(复选框)convertView.findViewById(R.id.cbSelect);
        viewHolder.checkbox.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){

                    @覆盖
                    公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
                        INT为getPosition =(整数)buttonView.getTag(); //下面就让我们看,我们已经为使用setTag的复选框的位置。
                        list.get(为getPosition).setSelected(buttonView.isChecked()); //设置复选框的值,以保持自己的状态。
                    }
                });
        convertView.setTag(viewHolder);
        convertView.setTag(R.id.tvSMSSend,viewHolder.textAddress);
        convertView.setTag(R.id.tvSMSBody,viewHolder.textBody);
        convertView.setTag(R.id.cbSelect,viewHolder.checkbox);
    } 其他 {
        viewHolder =(ViewHolder)convertView.getTag();
    }
    viewHolder.checkbox.setTag(位置); //这行是很重要的。

    viewHolder.textAddress.setText(list.get(位置).getAddress());
    viewHolder.textBody.setText(list.get(位置).getBody());
    viewHolder.checkbox.setChecked(list.get(位置).isSelected());

    返回convertView;
}
 


 公共类SMSListModel {

私人字符串地址;
字符串的身体;
选择私人布尔;

公共SMSListModel(字符串的地址,绳体){
    this.address =地址;
    this.body =身体;
}

公共字符串的getAddress(){
    退货地址;
}

公共字符串getBody(){
    返回身体;
}

公共布尔isSelected(){
    返回所选择的;
}

公共无效的setSelected(布尔选择){
    this.selected =选择;
}

公共字符串的toString(){

    返回身体;
}}
 

解决方案

我可以知道你为什么要选择多行。我的意思是你要选择多行执行什么具体的行动?

下面是更新code为您服务。请让我知道如果你没有得到任何code:

  ---------------
    包com.example.multiselectlist;

    进口的java.util.ArrayList;
    进口的java.util.List;

    进口android.app.Activity;
    进口android.content.Context;
    进口android.database.Cursor;
    进口android.net.Uri;
    进口android.os.Bundle;
    进口android.view.View;
    进口android.view.View.OnClickListener;
    进口android.widget.AdapterView;
    进口android.widget.AdapterView.OnItemClickListener;
    进口android.widget.ArrayAdapter;
    进口android.widget.Button;
    进口android.widget.CheckBox;
    进口android.widget.ListView;
    进口android.widget.TextView;
    进口android.widget.Toast;

    公共类MainActivity扩展活动实现OnItemClickListener,OnClickListener {

        按钮btnDelete;
        ListView控件listViewSMS;
        光标光标;
        SMSListAdapter smsListAdapter;
        上下文语境;

        ArrayAdapter< SMSListModel>适配器;
        名单< SMSListModel>名单=新的ArrayList< SMSListModel>();


        诠释计数= 0;
        @覆盖
        保护无效的onCreate(包savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.activity_main);
            上下文=这一点;
            listViewSMS =(ListView控件)findViewById(R.id.lvSMS);
            btnDelete =(按钮)findViewById(R.id.buttonDelete);

            光标= getContentResolver()查询(Uri.parse(内容://短信/收件箱),NULL,NULL,NULL,NULL);。

            smsListAdapter =新SMSListAdapter(这一点,getModel());
            listViewSMS.setAdapter(smsListAdapter);
            listViewSMS.setOnItemClickListener(本);

            btnDelete.setOnClickListener(本);
        }
        @覆盖
        公共无效onItemClick(适配器视图<>为arg0,视图V,INT ARG2,长ARG3){
            TextView的标签=(TextView中)v.getTag(R.id.tvSMSSend);
            复选框复选框=(复选框)v.getTag(R.id.cbSelect);
            Toast.makeText(v.getContext(),label.getText()的toString()++ isCheckedOrNot(复选框),Toast.LENGTH_LONG。).show();
        }

        私人字符串isCheckedOrNot(复选框复选框){
            如果(checkbox.isChecked())
                返回检查;
            其他
                重返不检查;
        }

        私人列表< SMSListModel> getModel(){

            如果(cursor.getCount()大于0){
                的for(int i = 0; I< cursor.getCount();我++){
                    如果(cursor.moveToPosition(i))的{
                        list.add(新SMSListModel(cursor.getString(cursor.getColumnIndex("address")),cursor.getString(cursor.getColumnIndex("body"))));
                    }
                }
            }


            返回列表;
        }
        @覆盖
        公共无效的onClick(视图v){
            INT的id = v.getId();

            开关(ID){
                案例R.id.buttonDelete:
                    如果(则为list.size()大于0){
                        的for(int i = 0; I<则为list.size();我++){
                            如果(list.get(ⅰ).isSelected()){
                                list.remove(ⅰ);
                            }
                        }

                        smsListAdapter =新SMSListAdapter(这一点,清单);
                        smsListAdapter.notifyDataSetChanged();
                        listViewSMS.setAdapter(smsListAdapter);
                    }
                    打破;
                    案例R.id.buttonSend:
 字符串contactNum =+123456789;
            字符串messageList的=;
            如果(则为list.size()大于0){
                的for(int i = 0; I<则为list.size();我++){
                    如果(list.get(ⅰ).isSelected()){
                        如果(messageList.equals())
                            messageList的= list.get(ⅰ).getBody();
                        其他
                            messageList的= messageList的+;+ list.get(ⅰ).getBody();
                    }
                }
                Log.v(messageList的,+ messageList的);
                乌里sendSmsTo = Uri.parse(smsto:+ contactNum);
                Log.d(sendSmsTo,+ sendSmsTo);
                意向意图=新的意图(android.content.Intent.ACTION_SENDTO,sendSmsTo);
                intent.putExtra(sms_body,messageList的);
                startActivityForResult(意向,100);
            }

            }

        }
    }
 


SMSListModel 类:

 包com.example.multiselectlist;

    公共类SMSListModel {

        私人字符串地址;
        字符串的身体;
        选择私人布尔;

        公共SMSListModel(字符串的地址,绳体){
            this.address =地址;
            this.body =身体;
        }

        公共字符串的getAddress(){
            退货地址;
        }

        公共字符串getBody(){
            返回身体;
        }

        公共布尔isSelected(){
            返回所选择的;
        }

        公共无效的setSelected(布尔选择){
            this.selected =选择;
        }
    }
 


SMSListAdapter 类:         包com.example.multiselectlist;

 进口的java.util.List;

    进口android.app.Activity;
    进口android.util.Log;
    进口android.view.LayoutInflater;
    进口android.view.View;
    进口android.view.ViewGroup;
    进口android.widget.ArrayAdapter;
    进口android.widget.CheckBox;
    进口android.widget.CompoundButton;
    进口android.widget.TextView;

    公共类SMSListAdapter扩展ArrayAdapter< SMSListModel> {

        私人最终名单,其中,SMSListModel>清单;
        私人最终活动mContext;
        布尔checkAll_flag = FALSE;
        布尔checkItem_flag = FALSE;

        公共SMSListAdapter(活动背景下,列表与LT; SMSListModel>名单)
        {
            超(背景下,R.layout.listview_each_item,清​​单);
            mContext =背景;
            this.list =清单;
        }

        静态类ViewHolder {
            受保护的TextView textAddress;
            受保护的TextView的TextBody;
            保护复选框复选框;
        }

        @覆盖
        公共查看getView(INT位置,查看convertView,ViewGroup中父){

            ViewHolder viewHolder = NULL;
            如果(convertView == NULL){
                LayoutInflater充气= mContext.getLayoutInflater();
                convertView = inflator.inflate(R.layout.listview_each_item,NULL);
                viewHolder =新ViewHolder();
                viewHolder.textAddress =(TextView中)convertView.findViewById(R.id.tvSMSSend);
                viewHolder.textBody =(TextView中)convertView.findViewById(R.id.tvSMSBody);
                viewHolder.checkbox =(复选框)convertView.findViewById(R.id.cbSelect);
                viewHolder.checkbox.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){

                            @覆盖
                            公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
                                INT为getPosition =(整数)buttonView.getTag(); //下面就让我们看,我们已经为使用setTag的复选框的位置。
                                list.get(为getPosition).setSelected(buttonView.isChecked()); //设置复选框的值,以保持自己的状态。
                            }
                        });
                convertView.setTag(viewHolder);
                convertView.setTag(R.id.tvSMSSend,viewHolder.textAddress);
                convertView.setTag(R.id.tvSMSBody,viewHolder.textBody);
                convertView.setTag(R.id.cbSelect,viewHolder.checkbox);
            } 其他 {
                viewHolder =(ViewHolder)convertView.getTag();
            }
            viewHolder.checkbox.setTag(位置); //这行是很重要的。

            viewHolder.textAddress.setText(list.get(位置).getAddress());
            viewHolder.textBody.setText(list.get(位置).getBody());
            viewHolder.checkbox.setChecked(list.get(位置).isSelected());

            返回convertView;
        }

    }
 


XML

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
        的xmlns:工具=htt​​p://schemas.android.com/tool​​s
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:paddingBottom会=@扪/ activity_vertical_margin
        机器人:以下属性来=@扪/ activity_horizo​​ntal_margin
        机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
        机器人:paddingTop =@扪/ activity_vertical_margin
        工具:上下文=MainActivity。>

         <按钮
            机器人:ID =@ + ID / buttonDelete
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentLeft =真
            机器人:layout_alignParentTop =真
            机器人:文本=删除/>

        <的ListView
            机器人:ID =@ + ID / lvSMS
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_below =@ + ID / buttonDelete>
        < / ListView控件>

    < / RelativeLayout的>
 


 < XML版本=1.0编码=UTF-8&GT?;
    < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT>

        <复选框
            机器人:ID =@ + ID / cbSelect
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentLeft =真
            机器人:layout_centerVertical =真/>

         <的TextView
            机器人:ID =@ + ID / tvSMSSend
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignBaseline =@ + ID / cbSelect
            机器人:layout_marginLeft =10dp
            机器人:layout_toRightOf =@ + ID / cbSelect
            机器人:文本=9998698700/>

        <的TextView
            机器人:ID =@ + ID / tvSMSBody
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignBaseline =@ + ID / tvSMSSend
            机器人:layout_marginLeft =10dp
            机器人:layout_toRightOf =@ + ID / tvSMSSend
            机器人:文本=体/>

    < / RelativeLayout的>
 

first i'm fetching all messages to my app to be store in listview then I'm selecting messages from listview using checkboxes and wish to send these selected sms to a single number that is predefined and wish to use the selected sms as body of message to be send to single no. but the problem is that the message sent contains complete listview messages not the selected one. So please someone correct me where i'm wrong in code as i wish to send only selected messages not the complete listview items(messages)


public class MainActivity extends Activity implements OnItemClickListener, OnClickListener{

Button send;
ListView listViewSMS;
Cursor cursor;
SMSListAdapter smsListAdapter;
Context context;
SharedPreferences prefs=null;
ArrayAdapter<SMSListModel> adapter;
List<SMSListModel> list = new ArrayList<SMSListModel>();
TextView textViewSMSSender, textViewSMSBody;
int i;
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context=this;
    listViewSMS=(ListView)findViewById(R.id.lvSMS);

    send = (Button)findViewById(R.id.btnproperty);
    send.setOnClickListener(this);

    textViewSMSSender=(TextView)findViewById(R.id.tvSMSSend);
    textViewSMSBody=(TextView)findViewById(R.id.tvSMSBody);

    cursor = getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null);

    smsListAdapter = new SMSListAdapter(this,getModel());
    listViewSMS.setAdapter(smsListAdapter);
    listViewSMS.setOnItemClickListener(this);


}
@Override
public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
    TextView label = (TextView) v.getTag(R.id.tvSMSSend);
    CheckBox checkbox = (CheckBox) v.getTag(R.id.cbSelect);
    Toast.makeText(v.getContext(), label.getText().toString()+" "+isCheckedOrNot(checkbox), Toast.LENGTH_LONG).show();      
}

private String isCheckedOrNot(CheckBox checkbox) {
    if(checkbox.isChecked())
        return "is checked";
    else
        return "is not checked";
}

private List<SMSListModel> getModel() {

    if(cursor.getCount()>0){
        for(i=0;i<cursor.getCount();i++){
            if(cursor.moveToPosition(i)){
                list.add(new SMSListModel(cursor.getString(cursor.getColumnIndex("address")),cursor.getString(cursor.getColumnIndex("body"))));
            }
        }
    }


    return list;
}
@Override
public void onClick(View v) {



    if( v == send){
        mDialog();

    }



public void mDialog(){



     // Show The Dialog with Selected SMS 
     AlertDialog dialog = new AlertDialog.Builder(context).create();
     dialog.setTitle("Message App");
     dialog.setIcon(android.R.drawable.ic_dialog_info);
     dialog.setMessage("Count : ");
     dialog.setButton(DialogInterface.BUTTON_POSITIVE, "ok",
             new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) 
         {
             String phoneNo = "111";
             if(list.size()>0){
                 for(i=0;i<list.size();i++){
                     if(list.get(i).isSelected()){

                         try{
                             SmsManager smsManager = SmsManager.getDefault();
                             StringBuilder builder = new StringBuilder();
                             for(SMSListModel p: list){
                                 builder.append(p.toString());
                                 builder.append('\n');
                             }
                            String sms = builder.toString();
                             smsManager.sendTextMessage(phoneNo, null, sms, null, null);
                          Toast.makeText(getApplicationContext(), "SMS Sent!",Toast.LENGTH_LONG).show();

                         }

                         catch (Exception e){
                             Toast.makeText(getApplicationContext(),"SMS faild, please try again later!",Toast.LENGTH_LONG).show();
                             e.printStackTrace();

                         }
                         dialog.dismiss();

                 }
              }
            }
         }
     });

     dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
            new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "SMS not Sent",Toast.LENGTH_LONG).show();
                        dialog.dismiss();

                    }
                });
     dialog.show();

}


public class SMSListAdapter extends ArrayAdapter<SMSListModel> {

private final List<SMSListModel> list;
private final Activity mContext;
boolean checkAll_flag = false;
boolean checkItem_flag = false;

public SMSListAdapter(Activity context,List<SMSListModel> list) 
{
    super(context, R.layout.listview_each_item, list);
    mContext = context;
    this.list = list;
}

static class ViewHolder {
    protected TextView textAddress;
    protected TextView textBody;
    protected CheckBox checkbox;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;
    if (convertView == null) {
        LayoutInflater inflator = mContext.getLayoutInflater();
        convertView = inflator.inflate(R.layout.listview_each_item, null);
        viewHolder = new ViewHolder();
        viewHolder.textAddress = (TextView) convertView.findViewById(R.id.tvSMSSend);
        viewHolder.textBody = (TextView) convertView.findViewById(R.id.tvSMSBody);
        viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.cbSelect);
        viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
                    }
                });
        convertView.setTag(viewHolder);
        convertView.setTag(R.id.tvSMSSend, viewHolder.textAddress);
        convertView.setTag(R.id.tvSMSBody, viewHolder.textBody);
        convertView.setTag(R.id.cbSelect, viewHolder.checkbox);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.checkbox.setTag(position); // This line is important.

    viewHolder.textAddress.setText(list.get(position).getAddress());
    viewHolder.textBody.setText(list.get(position).getBody());
    viewHolder.checkbox.setChecked(list.get(position).isSelected());    

    return convertView;
}


public class SMSListModel {

private String address;
String body;
private boolean selected;

public SMSListModel(String address, String body) {
    this.address = address;
    this.body = body;
}

public String getAddress() {
    return address;
}

public String getBody() {
    return body;
}

public boolean isSelected() {
    return selected;
}

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

public String toString(){

    return body;
}}

解决方案

May I know why you want to select multiple rows. I mean what exact action you want to perform by selecting multiple rows?

Here is the updated code for you. Please let me know in case you didn't get any code:

    ---------------
    package com.example.multiselectlist;

    import java.util.ArrayList;
    import java.util.List;

    import android.app.Activity;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;

    public class MainActivity extends Activity implements OnItemClickListener, OnClickListener{

        Button btnDelete;
        ListView listViewSMS;
        Cursor cursor;
        SMSListAdapter smsListAdapter;
        Context context;

        ArrayAdapter<SMSListModel> adapter;
        List<SMSListModel> list = new ArrayList<SMSListModel>();


        int count = 0;
        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context=this;
            listViewSMS=(ListView)findViewById(R.id.lvSMS);
            btnDelete = (Button)findViewById(R.id.buttonDelete);

            cursor = getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null);

            smsListAdapter = new SMSListAdapter(this,getModel());
            listViewSMS.setAdapter(smsListAdapter);
            listViewSMS.setOnItemClickListener(this);

            btnDelete.setOnClickListener(this);
        }
        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
            TextView label = (TextView) v.getTag(R.id.tvSMSSend);
            CheckBox checkbox = (CheckBox) v.getTag(R.id.cbSelect);
            Toast.makeText(v.getContext(), label.getText().toString()+" "+isCheckedOrNot(checkbox), Toast.LENGTH_LONG).show();      
        }

        private String isCheckedOrNot(CheckBox checkbox) {
            if(checkbox.isChecked())
                return "is checked";
            else
                return "is not checked";
        }

        private List<SMSListModel> getModel() {

            if(cursor.getCount()>0){
                for(int i=0;i<cursor.getCount();i++){
                    if(cursor.moveToPosition(i)){
                        list.add(new SMSListModel(cursor.getString(cursor.getColumnIndex("address")),cursor.getString(cursor.getColumnIndex("body"))));
                    }
                }
            }


            return list;
        }
        @Override
        public void onClick(View v) {
            int id = v.getId();

            switch(id){
                case R.id.buttonDelete:
                    if(list.size()>0){
                        for(int i=0;i<list.size();i++){
                            if(list.get(i).isSelected()){
                                list.remove(i);
                            }
                        }

                        smsListAdapter = new SMSListAdapter(this,list);
                        smsListAdapter.notifyDataSetChanged();
                        listViewSMS.setAdapter(smsListAdapter);
                    }
                    break;
                    case R.id.buttonSend:
 String contactNum = "+123456789";
            String messageList = "";
            if(list.size()>0){
                for(int i=0;i<list.size();i++){
                    if(list.get(i).isSelected()){
                        if(messageList.equals(""))
                            messageList = list.get(i).getBody();
                        else
                            messageList = messageList+";"+list.get(i).getBody();
                    }
                }
                Log.v("messageList",""+messageList);
                Uri sendSmsTo = Uri.parse("smsto:" + contactNum);
                Log.d("sendSmsTo",""+sendSmsTo);
                Intent intent = new Intent(android.content.Intent.ACTION_SENDTO, sendSmsTo);
                intent.putExtra("sms_body", messageList);
                startActivityForResult(intent, 100);    
            }

            }

        }
    }


SMSListModel class:

    package com.example.multiselectlist;

    public class SMSListModel {

        private String address;
        String body;
        private boolean selected;

        public SMSListModel(String address, String body) {
            this.address = address;
            this.body = body;
        }

        public String getAddress() {
            return address;
        }

        public String getBody() {
            return body;
        }

        public boolean isSelected() {
            return selected;
        }

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


SMSListAdapter class: package com.example.multiselectlist;

    import java.util.List;

    import android.app.Activity;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.TextView;

    public class SMSListAdapter extends ArrayAdapter<SMSListModel> {

        private final List<SMSListModel> list;
        private final Activity mContext;
        boolean checkAll_flag = false;
        boolean checkItem_flag = false;

        public SMSListAdapter(Activity context,List<SMSListModel> list) 
        {
            super(context, R.layout.listview_each_item, list);
            mContext = context;
            this.list = list;
        }

        static class ViewHolder {
            protected TextView textAddress;
            protected TextView textBody;
            protected CheckBox checkbox;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder viewHolder = null;
            if (convertView == null) {
                LayoutInflater inflator = mContext.getLayoutInflater();
                convertView = inflator.inflate(R.layout.listview_each_item, null);
                viewHolder = new ViewHolder();
                viewHolder.textAddress = (TextView) convertView.findViewById(R.id.tvSMSSend);
                viewHolder.textBody = (TextView) convertView.findViewById(R.id.tvSMSBody);
                viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.cbSelect);
                viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                            @Override
                            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                                int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                                list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
                            }
                        });
                convertView.setTag(viewHolder);
                convertView.setTag(R.id.tvSMSSend, viewHolder.textAddress);
                convertView.setTag(R.id.tvSMSBody, viewHolder.textBody);
                convertView.setTag(R.id.cbSelect, viewHolder.checkbox);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.checkbox.setTag(position); // This line is important.

            viewHolder.textAddress.setText(list.get(position).getAddress());
            viewHolder.textBody.setText(list.get(position).getBody());
            viewHolder.checkbox.setChecked(list.get(position).isSelected());    

            return convertView;
        }

    }


xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >

         <Button
            android:id="@+id/buttonDelete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Delete" />

        <ListView
            android:id="@+id/lvSMS"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/buttonDelete" >
        </ListView>

    </RelativeLayout>


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

        <CheckBox
            android:id="@+id/cbSelect"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />

         <TextView
            android:id="@+id/tvSMSSend"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/cbSelect"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/cbSelect"
            android:text="9998698700" />

        <TextView
            android:id="@+id/tvSMSBody"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/tvSMSSend"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/tvSMSSend"
            android:text="body" />

    </RelativeLayout>

这篇关于如何使用复选框以特定的不发送选定的邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆