如何创建一个数组以按字母顺序验证 ArrayAdapter

How to create an array to verify in alphabetical order an ArrayAdapter

我有一个 ArrayAdapter 有很多 "if" 检查列表标题的第一个字母来设置背景颜色,但我想使用一些东西作为数组或其他东西来减少行数class,但我不知道如何实现,有人可以帮忙吗?

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;

} }

谢谢

使用正则表达式检查第一个字符是否为字母:

public boolean isAlphaNumeric(String s){
    String pattern= "^[a-zA-Z0-9]*$";
        if(s.matches(pattern)){
            return true;
        }
        return false;   
}

然后如果 TRUE return/set 使用 substr 方法的字符串的第一个字符。

请使用Collections.sort(Arrays.asList(your_array[])); 因此 your_array[] 中的项目包含排序数据。

对于您的数组问题,绝对有更好的解决方案。首先,创建一个颜色引用数组:

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

确保针对所有边缘情况正确测试此代码。

试试下面的代码:

/**
 * 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);
}