android - ListView,在Android中使用颜色代码数组更改每一行

标签 android arrays listview

我正在尝试更改每一行的颜色,我有 2 个数组。一个有颜色名称,另一个有颜色代码。

我有一个带有颜色名称的 ListView,这些名称存储在一个字符串数组中。

String[] colourNames;
String[] colourCodes;

 protected void onCreate(Bundle savedInstanceState) {
     colourNames = getResources().getStringArray(R.array.listArray);
     colourCodes = getResources().getStringArray(R.array.listValues);

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

    ArrayAdapter aa = new ArrayAdapter(this, R.layout.activity_listview, colourNames);

    lv.setAdapter(aa);

    for(int i=0; i<colourCodes.length; i++)
        lv.getChildAt(i).setBackgroundColor(Color.parseColor(colourCodes[i]));
 }

在 arrays.xml 中:

<string-array name="listArray">
        <item>aliceblue</item>
        <item>antiquewhite</item>
        <item>aquamarine</item>
        <item>azure</item>
</string-array>
<string-array name="listValues">
        <item>00f0f8ff</item>
        <item>00faebd7</item>
        <item>007fffd4</item>
        <item>00f0ffff</item>
 </string-array>

应用在 lv.getChildAt(i).setBackgroundColor(Color.parseColor(colourCodes[i])); 处崩溃

最佳答案

您必须编写自己的自定义 ArrayAdapter。

先写一个颜色类:

color.java:

public class color {
    private String name;
    private String color;

    public color(String name, String color) {
        this.name = name;
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

然后列表项布局:

list_item_layout.xml

<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" 
  android:layout_width="match_parent"
  android:layout_height="match_parent">
    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

最后编写自定义适配器:

ColorListAdapter.java:

public class ColorListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<color> mColorList;

public ColorListAdapter(Activity activity, List<color> mColorList) {
    mInflater = (LayoutInflater) activity.getSystemService(
            Context.LAYOUT_INFLATER_SERVICE);
    this.mColorList = mColorList;
}

@Override
public int getCount() {
    return mColorList.size();
}

@Override
public Object getItem(int position) {
    return mColorList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView;

    // Get item_layout:
    rowView = mInflater.inflate(R.layout.list_item_layout, null);

    // Get TextView from item_layout:
    TextView textView =
            (TextView) rowView.findViewById(R.id.name);

    // Get color and text from current position set TextView
    color myColor = mColorList.get(position);
    textView.setText(myColor.getName());
    textView.setBackgroundColor(Color.parseColor(myColor.getColor()));
    return rowView;
  }
}

这些是 MainActivity.javaactivity_main.xml

MainActivity.java:

public class MainActivity extends Activity {

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

        List<color> colorList = new ArrayList<>();

        // Add color objects:
        colorList.add(new color("RED", "#FF0000"));
        colorList.add(new color("GREEN", "#00FF00"));
        colorList.add(new color("BLUE", "#0000FF"));
        colorList.add(new color("MY BEST", "#013583"));


        // Add list to your custom adapter
        ListView myListView = (ListView) findViewById(R.id.liste);
        ColorListAdapter mAdapter = new ColorListAdapter(this, colorList);

        // Set Adapter
        myListView.setAdapter(mAdapter);

    }

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/liste"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</RelativeLayout>

关于android - ListView,在Android中使用颜色代码数组更改每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35418852/

相关文章:

android - 使用 Headless JS 的 React-Native 本地通知

Android JSON 解析与 HTML 标签

java - 如何隐藏微调器中项目的 id?

javascript - 带有数组的字符串到数组

java - 如何在 sqlite android 中存储散列密码

c++ - 将数据写入数组时写访问冲突

javascript - 在 JavaScript 中使用数组

android - BottomSheet 中的 ListView

java - 如何在数组列表中添加选定的值并从数组列表中删除未选定的值

.net - WPF ListViewItem 失去焦点事件 - 如何获取该事件?