java - 更改数组列表中对象的文本颜色

标签 java android

我一直在尝试在数组列表中添加颜色参数:

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;
        }
    }

品牌.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;
    }
        }
    }

我正在尝试向 Arraylist 添加颜色,而不是

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

我将有这行代码:

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

文本颜色将相应更改为橙色。

最佳答案

因此,您想要一个包含有 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,然后在适配器中 findByView(如 brandName)并将 Brand 的颜色分配给新创建的 color textView。

关于java - 更改数组列表中对象的文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961897/

相关文章:

java - 是否可以将 Hibernate 与 EJB3 一起使用?

java - 使用 DatatypeConverter.parseHexBinary() 时出现 NullPointerException

java - image.getRGB(x,y) 的二进制 AND (&) 运算;

android - 将 MediaCodec 解码的视频帧绘制到屏幕的最快方法?

android - 我如何将 Facebook api 集成到任何 android 应用程序中?

android - 从 watch 应用程序启动 Pebble 应用程序

android - 微调器删除项目

android - View 未绘制在 GLSurfaceView 之上

java - 如何从 Scala 代码动态填充 java.util.HashMap?

java - 从随机生成器打印偶数