2011-10-22 133 views
1

這裏是我的layuout main.xml;android的listview監聽器不工作?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView android:id="@+id/android:list" android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:layout_weight="1" android:visibility="visible" android:clickable="true"/> 

</LinearLayout> 

這是擴展ListActivity的MainActivity;

public class MainActivity extends ListActivity { 
     private final List<SpinnerEntry> spinnerContent = new LinkedList<SpinnerEntry>(); 
     private ListView contactListView; 

     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      contactListView=getListView(); 
queryAllRawContacts(); 
registerForContextMenu(getListView()); 

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     Intent i = new Intent(this, ContactDetailsActivity.class); 
     i.putExtra("hello", id); 
     // Activity returns an result if called with startActivityForResult 

     startActivity(i); 
    } 

private void queryAllRawContacts() { 


     final String[] projection = new String[] { 
       RawContacts.CONTACT_ID,     // the contact id column 
       RawContacts.DELETED      // column if this contact is deleted 
     }; 

     final Cursor rawContacts = managedQuery(
       RawContacts.CONTENT_URI,    // the uri for raw contact provider 
       projection, 
       null,         // selection = null, retrieve all entries 
       null,         // not required because selection does not contain parameters 
       null);         // do not order 

     final int contactIdColumnIndex = rawContacts.getColumnIndex(RawContacts.CONTACT_ID); 
     final int deletedColumnIndex = rawContacts.getColumnIndex(RawContacts.DELETED); 

     spinnerContent.clear(); 
     if(rawContacts.moveToFirst()) {     // move the cursor to the first entry 
      while(!rawContacts.isAfterLast()) {   // still a valid entry left? 
       final int contactId = rawContacts.getInt(contactIdColumnIndex); 
       final boolean deleted = (rawContacts.getInt(deletedColumnIndex) == 1); 
       if(!deleted) { 
        spinnerContent.add(queryDetailsForContactSpinnerEntry(contactId)); 
       } 
       rawContacts.moveToNext();    // move to the next entry 
      } 
     } 

     rawContacts.close(); 
     final ContactsSpinnerAdapater adapter = new ContactsSpinnerAdapater(spinnerContent, this); 
     contactListView.setAdapter(adapter); 
    } 

這裏是我的customadapter類,名爲ContactsSpinnerAdapater;

public class ContactsSpinnerAdapater extends BaseAdapter implements 
     SpinnerAdapter{ 
    private final List<SpinnerEntry> content; 
    private final Activity activity; 

    public ContactsSpinnerAdapater(List<SpinnerEntry> content, 
      Activity activity) { 
     super(); 
     this.content = content; 
     this.activity = activity; 
    } 

    public int getCount() { 
     return content.size(); 
    } 

    public SpinnerEntry getItem(int position) { 
     return content.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, 
      ViewGroup parent) { 
     final LayoutInflater inflater = activity.getLayoutInflater(); // default layout inflater 
     final View spinnerEntry = inflater.inflate(
       R.layout.row, null);    // initialize the layout from xml 
     final TextView contactName = (TextView) spinnerEntry 
       .findViewById(R.id.cName); 
     final ImageView contactImage = (ImageView) spinnerEntry 
       .findViewById(R.id.userIcon); 
     final SpinnerEntry currentEntry = content.get(position);  
     contactName.setText(currentEntry.getContactName()); 
     contactImage.setImageBitmap(currentEntry.getContactPhoto()); 
     spinnerEntry.setOnClickListener(new OnClickListener(){ 


      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 

      }}); 
     return spinnerEntry; 
    } 




} 

問題是,無論我嘗試過點擊任何列表項時無法啓動ContacDetailsActivity intent。基本上,聽者一些如何不被激活。那麼你可以看看代碼並告訴我我錯過了什麼嗎?

回答

1

你已經把你的意圖開始代碼放在錯誤的地方。你需要把這個代碼:

super.onListItemClick(l, v, position, id); 
    Intent i = new Intent(this, ContactDetailsActivity.class); 
    i.putExtra("hello", id); 
    // Activity returns an result if called with startActivityForResult 

    startActivity(i); 

在getView方法在適配器這樣

public View getView(int position, View convertView, 
     ViewGroup parent) { 
    final int myFinalPosition = position; 
    final LayoutInflater inflater = activity.getLayoutInflater(); // default layout inflater 
    final View spinnerEntry = inflater.inflate(
      R.layout.row, null);    // initialize the layout from xml 
    final TextView contactName = (TextView) spinnerEntry 
      .findViewById(R.id.cName); 
    final ImageView contactImage = (ImageView) spinnerEntry 
      .findViewById(R.id.userIcon); 
    final SpinnerEntry currentEntry = content.get(position);  
    contactName.setText(currentEntry.getContactName()); 
    contactImage.setImageBitmap(currentEntry.getContactPhoto()); 
    spinnerEntry.setOnClickListener(new OnClickListener(){ 


     public void onClick(View arg0) { 
      Intent i = new Intent(activity, ContactDetailsActivity.class); 
      i.putExtra("hello", getItemId(myFinalPosition)); 
      // Activity returns an result if called with startActivityForResult 

      activity.startActivity(i); 

     }}); 
    return spinnerEntry; 
} 

的使用注意事項活動的變量啓動的意圖。

+0

感謝您的回答。事情是這個適配器類是一個不同的類。所以如果我像上面那樣將意圖放在課堂上,那麼這裏沒有任何意義,而且id是從哪裏來的?或者我應該做的是,我將把customadapter作爲活動類中的內部類繼承並嘗試它?你會建議什麼? – akd

+0

Ooops。你是對的。這是一個複製粘貼錯誤。我修改了我的答案以解決您的問題。 –

+0

輝煌:)歡呼隊友我欣賞這一點。只有一件事是缺少的是,當開始活動時,它應該被稱爲activity.startActivity(i);否則它不能找到方法:)感謝很多。林不知道,如果我可以問它在這裏,它現在的作品,但是當我點擊任何項目它不改變項目的顏色,使它像它被點擊?我應該在xml中明確地編程它? – akd