2016-04-19 168 views
0

私は、電話帳の連絡先を検索し、ListViewに選択した連絡先を一覧表示するための検索機能を追加したアクティビティを作成しようとしています。 ListViewの1行を取得できました。ただし、別の連絡先を追加しようとすると、最初の行が置き換えられます。私はアンドロイドアプリの開発に新しいです。希望の出力を得る方法を見つけることができません。ここでListViewには1行しか表示されません:Android

は私のコードです:

import android.app.SearchManager; 
import android.app.SearchableInfo; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.support.v4.app.NavUtils; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CursorAdapter; 
import android.widget.ListView; 
import android.widget.SearchView; 
import android.widget.TextView; 

public class FamilyAndFriends extends AppCompatActivity { 

    Typeface mytypeface1; 
    SearchView searchView; 
    ListView contactlist; 
    View contact_listview; 
    LayoutInflater layoutInflater; 
    Cursor nameCursor; 
    CursorAdapter nameAdapter; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_family_and_friends); 

     TextView textView = (TextView) findViewById(R.id.textView9); 
     mytypeface1 = Typeface.createFromAsset(getAssets(), "Roboto-Light.ttf"); 
     textView.setTypeface(mytypeface1); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar); 
     toolbar.setTitle("Friends & Family"); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     searchView = (SearchView) findViewById(R.id.searchView); 
     setupSearchView(); 

     layoutInflater = getLayoutInflater(); 
     contactlist = (ListView) findViewById(R.id.listView); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.menu_user_info, menu); 
     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     switch (id) { 
      case android.R.id.home: 
       NavUtils.navigateUpFromSameTask(this); 
       break; 
      case R.id.next: 
       startActivity(new Intent(this, Settings.class)); 
       break; 
     } 
     return true; 
    } 

    private void setupSearchView() { 

     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
     searchView.setSearchableInfo(searchableInfo); 
     searchView.setQueryRefinementEnabled(true); 
     searchView.setIconifiedByDefault(false); 
    } 

    private String getDisplayContactName(Intent intent) { 

     nameCursor = getContentResolver().query(intent.getData(), null, null, null, null); 
     nameCursor.moveToFirst(); 
     int idDisplayName = nameCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
     return nameCursor.getString(idDisplayName); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 

     if (ContactsContract.Intents.SEARCH_SUGGESTION_CLICKED.equals(intent.getAction())) { 

      final String CONTACT_NAME = getDisplayContactName(intent); 
      nameAdapter = new CursorAdapter(this, nameCursor, false) { 
       @Override 
       public View newView(Context context, Cursor cursor, ViewGroup parent) { 
        contact_listview = layoutInflater.inflate(R.layout.contact_listview, parent, false); 
        return contact_listview; 
       } 

       @Override 
       public void bindView(View view, Context context, Cursor cursor) { 
        final TextView name_Contact = (TextView) view.findViewById(R.id.contact_name); 
        name_Contact.setText(CONTACT_NAME); 
        name_Contact.setTypeface(mytypeface1); 

       } 
      }; 
     } 
     contactlist.setAdapter(nameAdapter); 

    } 


    @Override 
    protected void onStop() { 
     super.onStop(); 
     if (nameCursor != null) { 
      nameCursor.close(); 
     } 
    } 
} 

はどれ役立ちます???あなたのアダプタで

+1

そここんにちは、しています'contactlist.getAdapter()。swapCursor(nameAdapter);'を使って新しいアダプタを設定するのではなく、新しい名前を追加するたびに新しく新しいカーソルを作成しているように思えます。 –

+0

ここでコードの行を追加しますか? @adetaguionbajo –

+0

この行を以下のように置き換えてください: 'contactlist.getAdapter()。swapCursor(nameAdapter);' –

答えて

0

あなたが渡しているリストのサイズを返す必要があなたのgetItemCount()

@Override 
    public int getItemCount() { 
     return list.size(); 
    } 

一つだけのアイテムを戻ってきているように聞こえるほとんどの

+0

このメソッドをオーバーライドする方法はありますか?私はアダプタクラスを拡張していません。 –

+0

あなたは、配列アダプタまたはベースアダプタを拡張するときに、そのメソッドをオーバーライドする必要があります –

+0

アダプタクラスを拡張せずに行うことはできますか?はいの場合は、どのように? plzガイド。 @war_Hero –

関連する問題