通过包</t>传递List <t>

时间:2011-03-09 17:58:11

标签: android

我目前正在为uni进行Android分配,我对列表有点问题。

基本上我一直在遵循使用类型列表(在我的例子中是其联系人)的指南来为列表视图创建自定义listAdapter。

在我的主要活动上我有一个列表(联系人是一个容纳2个字符串,类型和数字的类)

然后,我会从联系人列表中的所选联系人处获取所有号码及其类型。然后为每个添加创建一个类的实例并将其添加到列表中。

一旦完成,我创建一个新的意图(基本上是一个具有列表视图但在对话框主题中的Activity)一旦声明了意图我做了一个i.putExtra并输入了一个名字和我的名单(我必须强调,我的这个工作正常,而不是列表而不是列表......令人困惑)

然后在我的listview活动中,我做了一个包b = getintent()。getextras();

然后尝试做List myContacts = b.get .... thers没有任何匹配列表,theres an arraylist和我尝试的各种东西搞砸我阅读的教程的东西。

如果我发布指向教程和源代码的链接,它可能更有意义。 总之,我在任何输入都是

感谢Vade

链接:http://dustinbreese.blogspot.com/2009/12/creating-listview-with-alternating.html

主要源代码:

 protected void getContactInfo(Intent intent)
{
     ArrayList<String> contacts = new ArrayList<String>() ;
     String name ="";
   Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);      
   while (cursor.moveToNext()) 
   {           
       String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
       name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

       String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

       if ( hasPhone.equalsIgnoreCase("1"))
           hasPhone = "true";
       else
           hasPhone = "false" ;

       if (Boolean.parseBoolean(hasPhone)) 
       {
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);

        while (phones.moveToNext()) 
        {
         String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
         String type = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
         contacts.add(type);
         contacts.add(number);

            //phoneNumber.add(new String("Hello"));





        }
        phones.close();
       }
   }
   cursor.close();


  Intent i = new Intent(this,ContactPicker.class);
  i.putExtra("PHONENUMBERS", contacts);

  startActivity(i);

}

列表视图来源:哦,我应该强调我使用以下内容,但我可以在这里看到一些不好的编码习惯!

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Bundle nBundle  = getIntent().getExtras();
    ArrayList<String> myArray = nBundle.getStringArrayList("PHONENUMBERS");
    List<Contacts> myContacts = getData(myArray);

    ListView lv = (ListView)findViewById(R.id.contactPicker);
    //lv_arr = (String[])myArray.toArray(new String[0]);
    //setListAdapter(new ArrayAdapter<String>(ContactPicker.this, android.R.layout.simple_list_item_1,lv_arr));

    ListAdapter adapter = new ContactsAdapter(this,myContacts,
            android.R.layout.simple_expandable_list_item_2, new String[] {
            Contacts.KEY_TYPE, Contacts.KEY_NUMBER}, new int[]{
            android.R.id.text1,android.R.id.text2});
    this.setListAdapter(adapter);
    }


    //
    private List<Contacts> getData(ArrayList<String> array){
        List<Contacts> myContacts = new ArrayList<Contacts>();
        int myArrayLength = array.size();
        for(int i = 0; i < myArrayLength;)
        {
            String type = array.get(i);
            ++i;
            String number = array.get(i);
            ++i;
            myContacts.add(new Contacts(type,number));

        }
        return myContacts;

    }

}

编辑:

阅读下面的评论后,我尝试了这个,并想检查一下它是否有效(它有效):

创建了一个名为ContactsList的类,如下所示:

import java.io.Serializable;
import java.util.List;

public class ContactsList implements Serializable   {

    private List<Contacts> innerContacts;

    public ContactsList(List<Contacts> contacts){
        this.innerContacts = contacts;
    }
    public List<Contacts> getList()
    {
        return this.innerContacts;
    }
}

然后我的主要做了

ContactsList l = new ContactsList(contacts);
Intent i = new Intent(this,ContactPicker.class);
i.putExtra("PHONENUMBERS", l);

然后在我的ContactPicker Activity上我做了这个:

Serializable l = nBundle.getSerializable("PHONENUMBERS");
    ContactsList cl = (ContactsList)l;
    List<Contacts> myContacts = cl.getList();

只是想确保这样做是可以接受的 感谢

0 个答案:

没有答案