Пользовательский адаптер для списка не работает

#android #android-listview #android-adapter

#Android #android-listview #android-адаптер

Вопрос:

У меня есть ListView, который должен быть списками, стиль которых был определен в моем пользовательском адаптере. Но, когда я открываю ListActivity , я получаю пустое действие.

Код адаптера:

 public class alarmListCustomAdapter extends ArrayAdapter<String> {

    private final Context context;
    private final String[] values;
    Typeface Light;

    public alarmListCustomAdapter(Context context, String[] values, String font) {
        super(context, R.layout.alarmlist_layout);
        this.context = context;
        this.values = values;
        Light = Typeface.createFromAsset(context.getAssets(), font);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.alarmlist_layout, parent, false);

        TextView tV1 = (TextView) rowView.findViewById(R.id.alarm_time);
        TextView tV2 = (TextView) rowView.findViewById(R.id.alarm_label);
        tV2.setText(values[position]);

        return rowView;
    }

}
 

ListActivity код-

 public class alarmList extends ListActivity {

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };

        // use your custom layout
        alarmListCustomAdapter adapter = new alarmListCustomAdapter(this, values, "fonts/Lato-Light.ttf");
        setListAdapter(adapter);

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item   " selected", Toast.LENGTH_LONG).show();
    }

}
 

Я не получаю никаких предупреждений или ошибок в моем LogCat. Что может быть не так?

Я пытаюсь изучить реализацию пользовательского адаптера здесь.

Ответ №1:

Измените это

  super(context, R.layout.alarmlist_layout);
 

Для

 super(context, R.layout.alarmlist_layout,values);
 

Поскольку у вас есть R.layout.alarmlist_layout , нет необходимости снова раздувать макет getView . Прочитайте комментарий blackbelt ниже.

Комментарии:

1. также вы могли бы предложить ему удалить логику раздувания представления, поскольку super позаботится об этом.

2. @blackbelt да, я все время забываю, что вы указывали на это ранее для аналогичного сообщения

3. @Raghunandan как мне удалить инфлятор? findViewbyID похоже, без него не работает.