我试图在安卓应用程序中创建一个简单的ListView,并更改视图的背景颜色。
我只需覆盖已定义的ArrayAdapter类的getView()方法并在其中更改它,就成功了。
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Categories) {
@Override
public View getView(int pos, View v, ViewGroup vg) {
View view = super.getView(pos, v, vg);
switch (pos) {
case 0:
view.setBackgroundColor(Color.RED);
break;
case 1:
view.setBackgroundColor(Color.BLUE);
break;
default:
break;
}
return view;
}
};但是,如果我删除switch-statement并在此函数外部使用它并返回视图,则颜色不会更新。我的意思是这样的:(lv是我的ListView)
lv.setAdapter(arrayAdapter);
for (int i=0; i<2; ++i) {
View V = (View) lv.getAdapter().getView(i, null, lv);
switch (i) {
case 0:
V.setBackgroundColor(Color.RED);
break;
case 1:
V.setBackgroundColor(Color.BLUE);
break;
default:
break;
}
}它确实会返回一个对视图的引用,那么为什么它不是这样工作的呢?
发布于 2017-09-28 20:45:30
无论何时你改变了什么,都可以打电话给:
ArrayAdapter.notifyDataSetChanged();无论如何,这不是很好的英式方式,但我猜每个解决方案都是一个解决方案¯_(ツ)_/
发布于 2017-09-28 20:48:55
我建议你使用RecyclerView而不是ListView。有一次,我创建了一个彩色列表。在这里,我只是复制我的代码。
public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.ViewHolder>{
private final ArrayList<String> dataSet;
class ViewHolder extends RecyclerView.ViewHolder {
final TextView mTextView;
final CardView cardView;
ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.info_text);
cardView = (CardView) v.findViewById(R.id.item_container);
}
}
public MyListAdapter(ArrayList<String> myDataset) {
dataSet = myDataset;
}
@Override
public MyListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(dataSet.get(position));
switch (position%11){
case 0: holder.cardView.setCardBackgroundColor(0xFFB71C1C);
break;
case 1: holder.cardView.setCardBackgroundColor(0xFF880E4F);
break;
case 2: holder.cardView.setCardBackgroundColor(0xFF4A148C);
break;
case 3: holder.cardView.setCardBackgroundColor(0xFF311B92);
break;
case 4: holder.cardView.setCardBackgroundColor(0xFF1A237E);
break;
case 5: holder.cardView.setCardBackgroundColor(0xFF01579B);
break;
case 6: holder.cardView.setCardBackgroundColor(0xFF004D40);
break;
case 7: holder.cardView.setCardBackgroundColor(0xFF1B5E20);
break;
case 8: holder.cardView.setCardBackgroundColor(0xFF33691E);
break;
case 9: holder.cardView.setCardBackgroundColor(0xFF827717);
break;
case 10: holder.cardView.setCardBackgroundColor(0xFFE65100);
break;
default: holder.cardView.setCardBackgroundColor(0xFFBF360C);
}
}
@Override
public int getItemCount() {
return dataSet.size();
}
}发布于 2017-09-29 10:32:01
您应该使用interface:在YourAdapter.class中定义一个接口:
public interface OnColorEvent{
void change(View v,int position)
}在YourAdapter.class中设置监听器:
private OnColorEvent e;
public void setOnColorEvent(OnColorEvent e)
{
this.e=e;
}在您的getView()方法中:
@Override
public View getView(int pos, View v, ViewGroup vg) {
View view = super.getView(pos, v, vg);
if(null!=e)
{
e.change(v,pos);
}
}
In YourActivity.class:
listview.setOnColorEvent(new OnColorEvent{
@Overide
public void change(View v,int position)
{
switch (position) {
case 0:
V.setBackgroundColor(Color.RED);
break;
case 1:
V.setBackgroundColor(Color.BLUE);
break;
default:
break;
}
}
});https://stackoverflow.com/questions/46469367
复制相似问题