java - Android:toString() 方法无法与自定义适配器一起正常工作?

标签 java android listview

我有一个调整 ListView 。 ListView 的内容是我的类 People 中的对象。 People 类有姓名和年龄。我想配置人员的显示方式,因此我构建了我的 toString() 方法,如下所示:

@Override
    public String toString() {
        switch(HomeScreenActivity.displayMode){
        case 1:
            return lastName + " " + firstName;
        case 2:
            return firstName + " " + mobileNumber;
        case 3:
            return lastName + " " + mobileNumber;
        default:
            return firstName + " " + lastName;
        }
    }

所以这是如何工作的,在我的程序中,用户被询问他/她的首选显示方法,他们选择它并且 myDisplaySwitcher 相应地改变所以 toString() 方法导致 ListView 以不同方式显示其内容。

一旦我实现了我的自定义适配器,它就停止工作了。我调查了此事,发现我的人员数据库正在更新,但 ListView 只是没有刷新其 View ,尽管我正在使 View 无效并通知数据集已更改等。关于自定义适配器,我是否遗漏了什么?

谢谢

编辑:请查看我的确切 toString() 方法。它不适用于此方法。它适用于普通适配器,但不适用于我的自定义适配器。

EDIT2:这是我的自定义适配器。这很可能是问题所在,但让我很困惑。

private class peopleAdapter extends BaseAdapter {

        private List<People> mData;

        public peopleAdapter(List<People> data) {
            mData = data;
        }

        @Override
        public int getCount() {
            return mData.size();
        }

        @Override
        public String getItem(int position) {
            return mData.get(position).getFullName();
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            TextView result;

            if (convertView == null) {
                result = (TextView) getLayoutInflater().inflate(
                        R.layout.home_screen_people_view, parent, false);
                //result.setTextColor(getResources().getColor(
                        //R.color.darkish_blue));
            } else {
                result = (TextView) convertView;
            }

            final String personRow = getItem(position);
            result.setText(personRow);
            result.setBackgroundResource(R.drawable.list_selector);

            return result;
        }

    }

EDIT3:这是我之前的问题。我遵循了公认的答案并且它起作用了。这是针对已经实现的简单 ArrayAdapter。现在,除了使用自定义适配器外,我正在尝试实现相同的目标。 Android simple adapter display in a listview

最佳答案

如果您使用的是 ListView ,那么您需要调用custom_adapter.notifyDataSetChanged(); 来刷新 ListView 。它会自动更新 ListView 。实际情况是,根据用户的选择,您的 ListView 所使用的字符串在 custom_adapter 中应该是正确的。

如果它也不能解决您的问题,那么请检查您的 mData.get(position).getFullName();正在返回正确的字符串以在 textview 上设置。

关于java - Android:toString() 方法无法与自定义适配器一起正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19263916/

相关文章:

java - 带有 JavaSE 的 Jython Netbeans

java - 如何为不同的类使用相同的变量名

android - jetpack compose 中的 fitSystemWindows 对应项

Android:当布局的重力固定时如何使各个 View 居中

android - 图像内存不足错误

java - 方法参数和局部变量是线程安全的

java - 限制java中方法的执行时间

Android 测试 - 如何验证 navController.currentDestination.arguments?

android - 更新 fragment 内的 ListView

android - 使用 sharedPreferences 在 listView 中保存 textView 颜色