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调整后,它就像一个符咒一样工作!有一些新的问题。获取整个标签并为每一行设置颜色。它应该只在新行上设置颜色,而不是在列表中已有的项目上设置颜色。