我有一个带有很多&#34的ArrayAdapter;如果"检查列表标题的第一个字母以设置背景颜色,但我想使用某些数组或其他东西来减少类的行,但我不知道如何实现它,有人可以帮助
public class DadosArrayAdapter extends ArrayAdapter<Dados> {
private int resource = 0;
private LayoutInflater inflater;
private Context context;
public DadosArrayAdapter(Context context, int resource) {
super(context, resource);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.resource = resource;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
view = inflater.inflate(resource, parent, false);
viewHolder.txtCor = (TextView) view.findViewById(R.id.txtCor);
viewHolder.txtFabricante = (TextView) view.findViewById(R.id.txtFabricante);
viewHolder.txtNome = (TextView) view.findViewById(R.id.txtNome);
view.setTag(viewHolder);
convertView = view;
} else {
viewHolder = (ViewHolder) convertView.getTag();
view = convertView;
}
Dados dados = getItem(position);
if (dados.getFabricante().startsWith("A")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_a));
viewHolder.txtCor.setText("A");
} else if (dados.getFabricante().startsWith("B")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_b));
viewHolder.txtCor.setText("B");
} else if (dados.getFabricante().startsWith("C")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_c));
viewHolder.txtCor.setText("C");
} else if (dados.getFabricante().startsWith("D")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_d));
viewHolder.txtCor.setText("D");
} else if (dados.getFabricante().startsWith("E")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_e));
viewHolder.txtCor.setText("E");
} else if (dados.getFabricante().startsWith("F")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_f));
viewHolder.txtCor.setText("F");
} else if (dados.getFabricante().startsWith("G")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_g));
viewHolder.txtCor.setText("G");
} else if (dados.getFabricante().startsWith("H")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_h));
viewHolder.txtCor.setText("H");
} else if (dados.getFabricante().startsWith("I")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_i));
viewHolder.txtCor.setText("I");
} else if (dados.getFabricante().startsWith("J")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_j));
viewHolder.txtCor.setText("J");
} else if (dados.getFabricante().startsWith("K")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_k));
viewHolder.txtCor.setText("K");
} else if (dados.getFabricante().startsWith("L")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_l));
viewHolder.txtCor.setText("L");
} else if (dados.getFabricante().startsWith("M")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_m));
viewHolder.txtCor.setText("M");
} else if (dados.getFabricante().startsWith("N")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_n));
viewHolder.txtCor.setText("N");
} else if (dados.getFabricante().startsWith("O")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_o));
viewHolder.txtCor.setText("O");
} else if (dados.getFabricante().startsWith("P")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_p));
viewHolder.txtCor.setText("P");
} else if (dados.getFabricante().startsWith("Q")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_q));
viewHolder.txtCor.setText("Q");
} else if (dados.getFabricante().startsWith("R")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_r));
viewHolder.txtCor.setText("R");
} else if (dados.getFabricante().startsWith("S")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_s));
viewHolder.txtCor.setText("S");
} else if (dados.getFabricante().startsWith("T")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_t));
viewHolder.txtCor.setText("T");
} else if (dados.getFabricante().startsWith("U")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_u));
viewHolder.txtCor.setText("U");
} else if (dados.getFabricante().startsWith("V")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_v));
viewHolder.txtCor.setText("V");
} else if (dados.getFabricante().startsWith("W")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_w));
viewHolder.txtCor.setText("W");
} else if (dados.getFabricante().startsWith("X")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_x));
viewHolder.txtCor.setText("X");
} else if (dados.getFabricante().startsWith("Y")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_y));
viewHolder.txtCor.setText("Y");
} else if (dados.getFabricante().startsWith("Z")) {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_z));
viewHolder.txtCor.setText("Z");
} else {
viewHolder.txtCor.setBackgroundColor(context.getResources().getColor(R.color.color_null));
viewHolder.txtCor.setText("?");
}
viewHolder.txtFabricante.setText(dados.getFabricante());
viewHolder.txtNome.setText(dados.getNome());
return view;
}
static class ViewHolder {
TextView txtCor;
TextView txtFabricante;
TextView txtNome;
} }
谢谢
答案 0 :(得分:1)
对于您的阵列问题,肯定有更好的解决方案。首先,创建一个颜色引用数组:
int[] colorRefs = {R.color.color_a, R.color.color_b, ...}
然后,创建一个从字母计算颜色位置的方法:
private int colorPosition(char letter) {
return letter - 'A';
}
获取文本的第一个字符并为其检索正确的颜色:
char firstLetter = dados.getFabricante().charAt(0);
int colorPosition = colorPosition(firstLetter);
if (colorPosition >= 0 && colorPosition < colors.length) {
int color = colors[colorPosition];
}
确保针对所有边缘情况正确测试此代码。
答案 1 :(得分:0)
使用正则表达式检查第一个字符是否为字母:
public boolean isAlphaNumeric(String s){
String pattern= "^[a-zA-Z0-9]*$";
if(s.matches(pattern)){
return true;
}
return false;
}
然后如果为TRUE,则使用substr
方法返回/设置字符串的第一个字符。
答案 2 :(得分:0)
请使用Collections.sort(Arrays.asList(your_array [])); 因此,your_array []中的项目包含已排序的数据。
答案 3 :(得分:0)
尝试以下代码:
/**
* Test Code
*/
private void test(){
String firstChar = dados.getFabricante().charAt(0);
if(Character.isAlphabetic(firstChar)){
setBgResource(viewHolder.txtCor, firstChar);
viewHolder.txtCor.setText(firstChar);
}else{
setBgResource(viewHolder.txtCor, "null");
viewHolder.txtCor.setText("?");
}
}
/**
* Set Background color of view.
*/
private void setBgResource(View view, String name){
view.setBackgroundColor(getResourceByName("color_" + name));
}
/**
* Get color resource from name.
*/
private int getResourceByName(String name){
Resources resources = getActivity().getApplicationContext().getResources();
final int resourceId = resources.getIdentifier(name, "color",
getActivity().getApplicationContext().getPackageName());
return resources.getColor(resourceId);
}