我目前正在为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();
只是想确保这样做是可以接受的 感谢