繁体   English   中英

ListView中仅显示一行:Android

[英]Only one row is displayed in ListView: Android

我正在尝试创建一个活动,其中添加了搜索工具以在电话簿中搜索联系人并在ListView中列出所选联系人。 我已经能够使ListView的一行工作。 但是,当我尝试添加另一个联系人时,它只是替换了第一行。 我是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();
        }
    }
}

有帮助吗???

很有可能听起来您getItemCount()中返回了一项

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

您需要返回适配器中传递的列表的大小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM