如何修改listview中某些项目的颜色默认android?

时间:2016-02-09 05:04:14

标签: android listview arraylist listitem

我有一个ListView,包括已预约的约会和未预约的约会,我可以在点击时更改颜色,但我想知道如何更改默认预订的颜色。

当获取数据并在列表视图中显示时,预订和未预订应以不同颜色显示。是否可能?

有人可以帮帮我吗? 提前致谢! 只需一个指导即可!

3 个答案:

答案 0 :(得分:3)

您应该按照以下步骤操作。

  1. 您首先需要在数据库中使用1列,您可以在其中检查约会的状态,即预订或未预订[预期布尔字段],或者如果varchar列的状态超过两种,则可以使用ENUM。

  2. 之后,您需要将数据表格数据库获取到数组适配器。

          Class MyAdaptor extends ArrayAdaptor<YourEntityClass>{
           ...............
          } 
    
  3. 之后,如果使用自定义适配器,则需要覆盖数组适配器类中的getView方法。

      public View getView(int position, View convertView, ViewGroup parent){
    
           LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           View rowView = inflater.inflate(R.layout.Your_TextView_File, parent, false);
       ........
       return rowView;
      }
    
  4. 现在在getView中检查if(object.getAppoinmentStatus == true)是否显示某些更改,否则显示一些更改。

        final YourEntityClass a = getItem(position);
        if(a.getAppoinmentStatus == true){
             //Change required text color
        }else{
           //Default
        }
    
  5. Get On item点击类

    中的监听器
     public class ListActivity extends Activity{
          private MyAdaptor adaptor;
          private ListView lv;
         @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.YourActivityLayout);
        adaptor = new MyAdaptor(this);
        lv = (ListView)findById(R.id.YourListView);
        onItemClickListener();
        }
    
    public void onItemClickListener(){
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
            if (adaptor.getItem(i).getAppoinmentStatus() == 0){
                 //Do Some Work
              }else{
                  //Do some Work
                 }
            }
     }
    

    这可能会对您有所帮助

答案 1 :(得分:0)

您可以在显示之前检查Adapter类中的数据类型。为预订和未预订的数据设置一点。在将数据设置为ListView之前检查该位并相应地更改颜色。请参阅下面的内容代码段。 在这里,status是可以通过构造函数传递其值的位。

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
View view = super.getView(position, convertView, parent);  
if (status == 1) {
    view.setBackgroundColor(Color.BLUE);  
} else {
    view.setBackgroundColor(Color.CYAN);  
}

return view;  
}

答案 2 :(得分:0)

在适配器方法的getView()中尝试类似这样的事情,

public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            final ListContent holder;
            View v = convertView;
            if (v == null) {
                v = mInflater.inflate(R.layout.row_list_item, parent, false);
                holder = new ListContent();

                holder.line_main = (LinearLayout) v.findViewById(R.id.line_main);
                v.setTag(holder);
            } else {
                holder = (ListContent) v.getTag();
            }

            Model pi = arrayModelList.get(position);

            if (pi.getFlag() == 1) {
                holder.line_main.setBackgroundColor(ContextCompat.getColor(YourActivity.this, R.color.colorPrimaryDark));
            } else if (pi.getFlag() == 2) {
                holder.line_main.setBackgroundColor(ContextCompat.getColor(YourActivity.this, R.color.colorPrimary));
            } else {
                holder.line_main.setBackgroundColor(ContextCompat.getColor(YourActivity.this, R.color.colorLightPrimary2));
            }
            return v;
        }

在你的模型类中为flag生成getter和setter方法,

private int flag;//1 = boxed,2 = unboxed

public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }