(исключение Ресурсы $ NotFoundException)) ListView.layoutChildren () строка: 1596 - PullRequest
1 голос
/ 09 января 2011

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

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

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

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

ListView.layoutChildren () line: 1596

ListView (AbsListView) .onLayout (логическое, int, int, int, int) строка: 1112

ListView (просмотр) .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);

// ПОЛЬЗОВАТЕЛЬСКИЙ СПИСОК

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

}

Ответы [ 2 ]

1 голос
/ 09 января 2011

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

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

0 голосов
/ 09 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...