2017-03-22 40 views
1

我一直试图在数组列表中添加一个颜色参数,我只是无法做到这一点,我花了无数小时试图做它,甚至搜索了一个在这里回答。更改数组列表中的对象的文本颜色

这是我的代码:

MainActivity.java:

package com.example.ofir.myapplication; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ArrayList<Brands> brands = new ArrayList<>(); 
     brands.add(new Brands("KTM")); 
     brands.add(new Brands("BMW")); 
     brands.add(new Brands("Suzuki")); 
     brands.add(new Brands("Yamaha")); 
     brands.add(new Brands("HONDA")); 

     BrandAdapter itemsAdapter = new BrandAdapter(this, brands); 

     ListView listView = (ListView) findViewById(R.id.brandlist); 

     listView.setAdapter(itemsAdapter); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       brands.get(position); 
       Intent intent = new Intent(MainActivity.this, infoPage.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

BrandAdapter.java

package com.example.ofir.myapplication; 
    import android.app.Activity; 
    import android.support.annotation.NonNull; 
    import android.support.annotation.Nullable; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ArrayAdapter; 
    import android.widget.ImageView; 
    import android.widget.TextView; 

    import java.util.ArrayList; 

    /** 
    * Created by Ofir on 21-Mar-17. 
    */ 
    public class BrandAdapter extends ArrayAdapter<Brands>{ 

     private int mColorResourceId; 

     //Resource id for background color of list 

     public BrandAdapter(Activity context, ArrayList<Brands> brands) { 
      super(context, 0, brands); 
      // mColorResourceId = ColorId; 

     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // check if the current view is reused else inflate the view 
      View listItemView = convertView; 
      if(listItemView == null){ 
       listItemView = LayoutInflater.from(getContext()).inflate(R.layout.activity_main, parent, false); 
      } 

      Brands brand_item = getItem(position); 

      TextView brandName = (TextView) listItemView.findViewById(R.id.brandtextview); 
      brandName.setText(brand_item.getBrand()); 

      return listItemView; 
     } 
    } 

Brands.java

package com.example.ofir.myapplication; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

/** 
* Created by Ofir on 20-Mar-17. 
*/ 

public class Brands extends AppCompatActivity { 

    private String mBrandName; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    public Brands(String brandName){ 
     mBrandName = brandName; 

} 

    public String getBrand(){ 
     return mBrandName; 
    } 
     } 
    } 

我想什么为01添加颜色所以不是

brands.add(new Brands("KTM")); 

我也会有这样的一行代码:

brands.add(new Brands("KTM", Orange)); 

和文字颜色将相应更改为橙色。

非常感谢各位的帮助。

+0

为什么你的'品牌'类扩展'AppCompatActivity',这意味着它是活动。而我所理解的只是存储品牌名称,所以它被称为pojo类 – miljon

+0

谢谢你让我知道,我删除它,基本上我试图做的是在主屏幕上列出一个列表,并在每个列表项上单击它将移动到正确的页面,即时尝试使每个列表项具有代表品牌的颜色。 – Skity

回答

0

所以你想拥有具有2个值,品牌名称和颜色的对象列表。 如果是这样,您必须在您的品牌类中声明颜色。

public class Brands { 

    private String mBrandName; 
    private String colour; 

    //constructor with 2 arguments, brand name and colour 
    public Brands(String brandName, String colour){ 
     mBrandName = brandName; 
     this.colour = colour; 
    } 

    public String getBrand(){ 
     return mBrandName; 
    } 

    public String getColour(){ //getter of colour 
     return colour; 
    } 
} 

然后你就可以在列表(引号作为一个字符串,所以)添加颜色:

brands.add(new Brands("KTM", "#FF9933")); //#FF9933 means orange in RGB 

如果你想显示的颜色,那么你必须改变你的适配器,此行:

brandName.setText(brand_item.getBrand()); 

到这样的事情:

brandName.setText(brand_item.getBrand()); 
brandName.setColorText(Color.parseColor(brand_item.getColour())); 

更多信息有关设置颜色,您可以在这里找到:

https://stackoverflow.com/a/4602929/3870382

=========旧文本

但我强烈建议增加新的TextView将要显示的颜色,然后在您的适配器(如brandName)中查找它并查看它,并将Brand的颜色分配给新创建的颜色文本视图。

+0

首先感谢您的回复,我不明白它是如何知道GetColour指的是一种颜色?所有它知道它只是一个简单的字符串? – Skity

+0

我改变了品牌类,它有字段类型为'String'的colour',这个类有getter方法'getColour()',它返回'String'类型的字段'colour'。看看“品牌”类。 – miljon

+0

我看到了,但不是getColour只是字符串的名字?什么把它定义为一种颜色? – Skity