Java 样式将行添加到ArrayAdapter ListView Android

Java 样式将行添加到ArrayAdapter ListView Android,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我有一个列表视图,我想与阵列适配器一起使用它来添加不同样式的行。在我的应用程序中,行是在不同的状态下创建的,根据不同的状态,行应该被设置样式(比如颜色和其他) 下面是一些伪代码: 关于创建: mArrayAdapter = new ArrayAdapter(this, R.layout.message); mView = (ListView) findViewById(R.id.in); mView.setAdapter(mArrayAdapter); 在由另一个线程使用MessageHand

我有一个
列表视图
,我想与
阵列适配器一起使用它来添加不同样式的行。在我的应用程序中,行是在不同的状态下创建的,根据不同的状态,行应该被设置样式(比如颜色和其他)

下面是一些伪代码:

关于创建:

mArrayAdapter = new ArrayAdapter(this, R.layout.message);
mView = (ListView) findViewById(R.id.in);
mView.setAdapter(mArrayAdapter);
在由另一个线程使用MessageHandler触发的不同状态下,向包含消息的列表中添加一行:

mArrayAdapter.add("Message");

这很好,消息会根据不同的状态在列表中弹出,但我希望行的样式不同。如何做到这一点?使用自定义Add()方法创建自定义
ArrayAdapter
的解决方案是什么?

您需要做的是创建自定义
ArrayAdapter
并覆盖
getView()
方法。在那里,您可以决定是否对行应用不同的样式。例如:

class CustomArrayAdapter extends ArrayAdapter {
    CustomArrayAdapter() {
        super(YourActivity.this, R.layout.message);
    }

    public View getView(int position, View convertView,
                                            ViewGroup parent) {
        View row=convertView;

        if (row==null) {                                                    
            LayoutInflater inflater=getLayoutInflater();

            row=inflater.inflate(R.layout.message, parent, false);
        }

        // e.g. if you have a TextView called in your row with ID 'label'
        TextView label=(TextView)row.findViewById(R.id.label);
        label.setText(items[position]);

        // check the state of the row maybe using the variable 'position'
        if( I do not actually know whats your criteria to change style ){
            label.setTextColor(blablabla);
        }

        return(row);
    }
}

您需要做的是创建一个自定义的
ArrayAdapter
并重写
getView()
方法。在那里,您可以决定是否对行应用不同的样式。例如:

class CustomArrayAdapter extends ArrayAdapter {
    CustomArrayAdapter() {
        super(YourActivity.this, R.layout.message);
    }

    public View getView(int position, View convertView,
                                            ViewGroup parent) {
        View row=convertView;

        if (row==null) {                                                    
            LayoutInflater inflater=getLayoutInflater();

            row=inflater.inflate(R.layout.message, parent, false);
        }

        // e.g. if you have a TextView called in your row with ID 'label'
        TextView label=(TextView)row.findViewById(R.id.label);
        label.setText(items[position]);

        // check the state of the row maybe using the variable 'position'
        if( I do not actually know whats your criteria to change style ){
            label.setTextColor(blablabla);
        }

        return(row);
    }
}

谢谢,在som调整后效果很好!有一些新的问题。获取整个标签并为每一行设置颜色。它应该只是在新行上设置颜色,而不是在列表中已经存在的项目上。谢谢,在som调整后,它就像一个符咒一样工作!有一些新的问题。获取整个标签并为每一行设置颜色。它应该只在新行上设置颜色,而不是在列表中已有的项目上设置颜色。