(исключение Ресурсы $ NotFoundException)) ListView.layoutChildren () строка: 1596

1

Я пытаюсь создать список с помощью специальной ячейки элемента списка полностью программным способом (без использования какого-либо xml). Я столкнулся с ошибкой. После нескольких часов поиска в Интернете я пишу это как свой первый вопрос о переполнении стека.

Оцените свои входы в этом и любые предложения о том, как лучше обрабатывать Android-программы, не используя R. *. xml

При запуске этого кода я получаю следующую ошибку:

(Приостановлено (исключение Ресурсы $NotFoundException))

ListView.layoutChildren(): 1596

ListView (AbsListView).onLayout(строка boolean, int, int, int, int): 1112

ListView (View).layout(int, int, int, int) строка: 6569

FrameLayout.onLayout(boolean, int, int, int, int): 333 ...

Код:

открытый класс MyList расширяет ListActivity {

static final ArrayList<HashMap<String,String>> list = 
    new ArrayList<HashMap<String,String>>();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

//CUSTOM LIST

    LinearLayout mainLayout=new LinearLayout(this);
    ListView myListView=new ListView(this);
    mainLayout.addView(myListView);


    LinearLayout ListItemLayout=new LinearLayout(this);
    TextView title = new TextView(this);
    TextView author = new TextView(this);
    TextView price = new TextView(this);
    ListItemLayout.addView(title);
    ListItemLayout.addView(author);
    ListItemLayout.addView(price);

    SimpleAdapter adapter = new SimpleAdapter(
        this,
        list,
        ListItemLayout.getId(),
        new String[] {"title","author","price"},
        new int[] {ListItemLayout.getChildAt(0).getId(),ListItemLayout.getChildAt(1).getId(),ListItemLayout.getChildAt(2).getId()}
    );     
    populateList();
    setListAdapter(adapter);  

}

private void populateList() {
    HashMap<String,String> map = new HashMap<String,String>();
    map.put("title",
"Professional Android ");
    map.put("author", "Meier");
    map.put("price", "$54.99");
    list.add(map);
    map = new HashMap();
    map.put("title","Android 2");
    map.put("author", 
"Sayed");
    map.put("price", "$48.98");
    list.add(map);
    }

}

Теги:
android-layout

2 ответа

1
Лучший ответ

Вы не можете этого сделать. SimpleAdapter требуется идентификатор ресурса из макета, определенного в xml. Для этого также требуются идентификаторы ресурсов TextView, которые он будет заполнять. Это связано с тем, что он использует LayoutInflater#inflate для создания содержащего View, а затем ViewGroup#findViewById, чтобы получить ссылку на TextView, которая отобразит данные.

Если вы хотите сделать весь свой макет в коде, включая код Adapter, вам нужно будет создать свой собственный Adapter класс. Вы можете сделать это, растягивая BaseAdapter и переопределяя getView как минимум.

  • 0
    Работал отлично после создания собственного адаптера. Спасибо Qberticus!
0

Конструктор вашего SimpleAdapter требует идентификатора из вашего ListItemLayout, но у него его нет (я думаю, Android отпадает, чтобы проверить файл R), поэтому присвойте ему идентификатор в вашем коде.

  • 0
    Добавлен setId для ListItemLayout и TextViews. По-прежнему получаю ту же ошибку .. LinearLayout ListItemLayout = new LinearLayout (this); ListItemLayout.setId (1002); TextView title = new TextView (это); title.setId (1003); TextView author = new TextView (this); author.setId (1004); TextView цена = новый TextView (это); price.setId (1005); ListItemLayout.addView (название); ListItemLayout.addView (автор); ListItemLayout.addView (цена);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню