私は、電話帳の連絡先を検索し、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();
}
}
}
はどれ役立ちます???あなたのアダプタで
そここんにちは、しています'contactlist.getAdapter()。swapCursor(nameAdapter);'を使って新しいアダプタを設定するのではなく、新しい名前を追加するたびに新しく新しいカーソルを作成しているように思えます。 –
ここでコードの行を追加しますか? @adetaguionbajo –
この行を以下のように置き換えてください: 'contactlist.getAdapter()。swapCursor(nameAdapter);' –