2017-03-22 77 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