2014-03-13 97 views
0

的狀態i havetwo activty其中b活動具有接觸細節當用戶選中複選框,數據被存儲在字符串中的活性的,爲了更selction用戶回到b活動時,先前選擇的觸點檢查顯示,這意味着他們的狀態ramain保存,如何做到這一點保存複選框

MainActivity.java

package com.example.smscampaign; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.os.Parcelable; 
import android.provider.ContactsContract; 
import android.telephony.gsm.SmsManager; 
import android.util.SparseBooleanArray; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class MainActivity extends Activity implements OnItemClickListener { 

    ArrayList<String> name1 = new ArrayList<String>(); 
    ArrayList<String> phno1 = new ArrayList<String>(); 
    ArrayList<String> phno0 = new ArrayList<String>(); 
    MyAdapter ma; 
    Button send; 
    ListView lv ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ActionBar actionBar = getActionBar(); 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     setContentView(R.layout.get); 
     TextView txt=(TextView) findViewById(R.id.textView1); 
     getAllCallLogs(this.getContentResolver()); 
     lv = (ListView) findViewById(R.id.lv); 
     ma = new MyAdapter(); 
     lv.setAdapter(ma); 
     lv.setOnItemClickListener(this); 
     lv.setItemsCanFocus(false); 
     lv.setTextFilterEnabled(true); 




    } 

/* @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     // Save ListView state 
     Parcelable state = lv.onSaveInstanceState(); 

     // Set new items 
     lv.setAdapter(Baseadapter); 

     // Restore previous state (including selected item index and scroll position) 
     lv.onRestoreInstanceState(state); 
    }*/ 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // TODO Auto-generated method stub 
     getMenuInflater().inflate(R.menu.contact_main, menu); 

     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 

     switch (item.getItemId()) { 
     case R.id.addPage: 

    break; 

     } 
     return super.onOptionsItemSelected(item); 
    } 
    @Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
     StringBuilder checkedcontacts = new StringBuilder(); 
     System.out.println(ma.mCheckStates.size()); 
     for (int i = 0; i < name1.size(); i++) 

     { 
      if (ma.mCheckStates.get(i) == true) { 
       phno0.add(phno1.get(i).toString()); 
       checkedcontacts.append(name1.get(i).toString()); 
       checkedcontacts.append("\n"); 

      } else { 
       System.out.println("..Not Checked......" 
         + name1.get(i).toString()); 
      } 

     } 
     //Toast.makeText(MainActivity.this, checkedcontacts, 1000).show(); 
     Intent returnIntent = new Intent(); 
     returnIntent.putStringArrayListExtra("name", phno0); 

     setResult(RESULT_OK, returnIntent); 


     finish(); 
    } 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 
     ma.toggle(arg2); 
    } 

    public void getAllCallLogs(ContentResolver cr) { 

     Cursor phones = cr.query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
       null, null); 
     while (phones.moveToNext()) { 
      String name = phones 
        .getString(phones 
          .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phoneNumber = phones 
        .getString(phones 
          .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      System.out.println( phoneNumber); 
      name1.add(name); 
      phno1.add(phoneNumber); 
     } 

     phones.close(); 
    } 

    class MyAdapter extends BaseAdapter implements 
      CompoundButton.OnCheckedChangeListener { 
     private SparseBooleanArray mCheckStates; 
     LayoutInflater mInflater; 
     TextView tv1, tv; 
     CheckBox cb; 

     MyAdapter() { 
      mCheckStates = new SparseBooleanArray(name1.size()); 
      mInflater = (LayoutInflater) MainActivity.this 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     // Save ListView state 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return name1.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 

      return 0; 
     } 

     @Override 
     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      // TODO Auto-generated method stub 
      View vi = convertView; 
      if (convertView == null) 
       vi = mInflater.inflate(R.layout.row, null); 
      tv = (TextView) vi.findViewById(R.id.textView1); 
      tv1 = (TextView) vi.findViewById(R.id.textView2); 
      cb = (CheckBox) vi.findViewById(R.id.checkBox1); 
      tv.setText(name1.get(position)); 
      tv1.setText(phno1.get(position)); 
      cb.setTag(position); 
      cb.setChecked(mCheckStates.get(position, false)); 
      cb.setOnCheckedChangeListener(this); 

      return vi; 
     } 

     public boolean isChecked(int position) { 
      return mCheckStates.get(position, false); 
     } 

     public void setChecked(int position, boolean isChecked) { 
      mCheckStates.put(position, isChecked); 
     } 

     public void toggle(int position) { 
      setChecked(position, !isChecked(position)); 
     } 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      // TODO Auto-generated method stub 
      mCheckStates.put((Integer) buttonView.getTag(), isChecked); 
     } 

    } 

} 

回答

0

傳遞字符串在意向。 嘗試此代碼爲例: 你需要把它從你的新的活動作爲傳遞一個Intent

ArrayList<String> mylist = new ArrayList<String>(); 
Intent intent = new Intent(ActivityName.this, Second.class); 
intent.putStringArrayListExtra("key", mylist); 
startActivity(intent); 

然後提取它是這樣的:

Intent i = getIntent(); 
ArrayList<String> list = i.getStringArrayListExtra("key"); 

希望這可以幫助你。

+0

其中我必須添加上面的代碼..,沒有得到它 – Himani

+0

第一個代碼片段,你必須在活動中添加你想存儲的CheckBox List.And另一個代碼片段,你必須放在另一個活動要在哪裏顯示列表。 –

+0

sry但不工作 – Himani