2013-02-01 24 views
1

我已經創建了自定義適配器和自定義列表項。我最初使用一個簡單的列表項目,並填寫名稱或編號。但是,現在我想在每個列表項中顯示姓名和電話號碼。當我在自動填充文本中鍵入內容時,它不會填充任何內容。我做了一些錯誤測試,看起來它甚至沒有調用重寫的getView()方法。我似乎無法弄清楚爲什麼這不起作用。Android autocompletetextview不會使用自定義適配器填充聯繫人

此外,是的,我已經在清單中添加了READ_CONTACTS權限。

MainActivity.java

package com.sncrmck.autocompletetest; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.AutoCompleteTextView; 

import com.sncrmck.adapter.ContactAdapter; 
import com.sncrmck.obj.SimpleContact.SimpleContact; 

public class MainActivity extends Activity { 

    AutoCompleteTextView acTextField; 
    private ContactAdapter adapter; 

    public ArrayList<SimpleContact> contactList = new ArrayList<SimpleContact>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ContentResolver resolver = getContentResolver(); 

     acTextField = (AutoCompleteTextView) findViewById(R.id.autoComplete); 

     Uri contacts = Uri.parse("content://icc/adn"); 

     Cursor cursor = resolver.query(contacts, null, null, null, null); 

     if (cursor.moveToFirst()) { 

      String contactName; 
      String phoneNumber; 

      int nameColumn = cursor.getColumnIndex("name"); 
      int phoneColumn = cursor.getColumnIndex("number"); 


      do { 

      contactName = cursor.getString(nameColumn); 
      phoneNumber = cursor.getString(phoneColumn); 
       if((contactName != " " || contactName != null) && (phoneNumber!= " " ||phoneNumber!= null)) 
       { 
       SimpleContact sc = new SimpleContact(contactName, phoneNumber); 
       contactList.add(sc); 
       } 

      } while (cursor.moveToNext()); 

     } 
     adapter = new ContactAdapter(this, R.layout.grid_item, contactList); 
     acTextField.setAdapter(adapter); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

CustomAdapter.java

package com.sncrmck.adapter; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.sncrmck.autocompletetest.R; 
import com.sncrmck.obj.SimpleContact.SimpleContact; 

public class ContactAdapter extends ArrayAdapter<SimpleContact> { 

    private ArrayList<SimpleContact> entries; 
    private Activity activity; 


    public ContactAdapter(Activity a, int textViewResourceId, ArrayList<SimpleContact> entries){ 
     super(a, textViewResourceId, entries); 
     this.entries = entries; 
     this.activity = a; 
     Toast.makeText(getContext(), "Constructor", Toast.LENGTH_SHORT).show(); 

    } 

    public static class ViewHolder{ 
      public TextView item1; 
      public TextView item2; 

     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      Toast.makeText(getContext(), "Get View", Toast.LENGTH_SHORT).show(); 
      View v = convertView; 
      ViewHolder holder; 
      if (v == null) { 
       LayoutInflater vi = 
        (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.grid_item, null); 
       holder = new ViewHolder(); 
       holder.item1 = (TextView) v.findViewById(R.id.big); 
       holder.item2 = (TextView) v.findViewById(R.id.small);; 

      } 

      else 
       holder=(ViewHolder)v.getTag(); 

      final SimpleContact contactInfo = entries.get(position); 
      if (contactInfo != null) { 
       holder.item1.setText(contactInfo.getContactName()); 
       holder.item2.setText(contactInfo.getContactNumber()); 

      } 
      return v; 
     } 

    } 

這是SimpleContact對象我傳遞給ContactAdapter

package com.sncrmck.obj.SimpleContact; 

public class SimpleContact { 

    private String contactName; 
    private String contactNumber; 

    public SimpleContact(String string, String string2) { 
     this.contactName = string; 
     this.contactNumber = string2; 
    } 

    public String getContactName() { return contactName; } 

    public void set(String contactName) { this.contactName= contactName; } 

    public String getContactNumber() { return contactNumber; } 

    public void setcustomSmall(String contactNumber) { this.contactNumber = contactNumber; } 
    } 

最後,這是我的自定義列表項 - grid_item.xml

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

     <TextView 
      android:textSize="24dp" 
      android:id="@+id/big" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

     <TextView 
      android:textSize="24dip" 
      android:id="@+id/small" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

</LinearLayout> 
+0

[Android AutoCompleteTextView自定義適配器篩選不工作]的可能重複(http://stackoverflow.com/questions/8784249/android-autocompletetextview-with-custom-adapter-filtering-not-working) –

回答

0

你需要重寫用getFilter您的自定義適配器()方法

還實現自定義過濾器和覆蓋的方法那。

請參閱similar question

我沒有我的代碼在工作,所以如果我今晚有機會我會編輯答案。

相關問題