【问题标题】:Changing object's text color in an array list在数组列表中更改对象的文本颜色
【发布时间】:2017-03-22 20:21:29
【问题描述】:

我一直在尝试在数组列表中添加一个颜色参数,但我似乎无法做到,我花了无数个小时尝试做到这一点,甚至在这里寻找答案。

这是我的代码:

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

文本颜色会相应地变为橙色。

感谢任何形式的帮助。

【问题讨论】:

  • 为什么你的 Brands 类扩展 AppCompatActivity 这意味着它是活动.. 我理解你只是存储 Brand 的名称所以它应该是一些 pojo 类
  • 谢谢你让我知道,我删除了它,基本上我想做的是在主屏幕上列出一个列表,然后在每个列表项上单击它会移动到正确的页面,我正在尝试使每个列表项都具有代表品牌的颜色。

标签: java android


【解决方案1】:

因此,您希望拥有包含 2 个值、品牌名称和颜色的 Object 列表。 如果是这样,您必须在品牌类别中声明颜色。

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 的颜色分配给新创建的颜色 textView。 p>

【讨论】:

  • 首先谢谢你的回复,我不明白它怎么知道GetColour指的是一种颜色?据它所知,它只是一个简单的字符串?
  • 我更改了Brand 类,它具有String 类型的字段colour,并且此类具有一个getter 方法getColour(),它返回colour 类型的String 字段。看Brand类。
  • 我看到了,但 getColour 不只是字符串的名称吗?什么将它定义为颜色?
  • 哦,伙计,这是 Java 的基础:P getColour 是方法(一个 getter),如果您需要字段颜色的值,您可以调用它。您的类中有构造函数,将构造函数参数分配给对象字段(第一个参数名称和第二个参数颜色),当您通过 new Brand("KTM", "orange"); 构造您的 Brand 对象时,它知道名称是 KTM 并且颜色是 orange .阅读有关方法、构造函数和面向对象编程的信息。也许这对你有帮助:stackoverflow.com/a/17942675/3870382
  • 我明白了,感谢您的帮助和耐心等待,我仍处于编码的第一步,您已经帮了很多忙!
猜你喜欢
  • 2013-05-17
  • 2019-03-13
  • 2011-01-22
  • 2017-08-08
  • 2017-08-11
  • 2021-01-18
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多