2016-12-10 2 views
1

сегодня я работал над переводом одного из моих приложений на чистую сборку kotlin в качестве теста. В настоящее время я борюсь с адаптерами массивов и получаю эту ошибку.Anko DSL с ArrayAdapter

File from xml type layout resource ID #0x7f0c000a 

Это - моя деятельность, у которой есть ошибка.

class KotlinTest : Activity() { 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 

     val arr = Array(5, Int::toString) 

     verticalLayout { 


      id = R.id.test_text_layout 

      textView { 
       width = matchParent 
       height = matchParent 
       id = R.id.test_text_item 
      } 


      listView { 
       id = R.id.test_text_view 
      } 
     } 

     val cardAdapter: ArrayAdapter<String>? = ArrayAdapter(ctx, R.id.test_text_layout, arr) 

     val tempView: ListView = findViewById(R.id.test_text_view) as ListView 

     tempView.adapter = cardAdapter 

     cardAdapter?.notifyDataSetChanged() 

    } 

} 

И это файл ids.xml.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <item name="test_text_item" type="id"/> 
    <item name="test_text_view" type="id"/> 
    <item name="test_text_layout" type="id"/> 

</resources> 

Я пробовал несколько вещей, но не повезло, поэтому любые рекомендации будут оценены. Я предполагаю, что я просто пропустил что-то немое.

+0

В какой строке действительно появляется ошибка? – voddan

+0

@voddan Я не получаю ошибку до 'tempView.adapter = cardAdapter', которая, когда я предполагаю, что на самом деле пытается построить arrayAdapter и раздуть макет, но я могу ошибаться. Если я запустил его с этой строкой, а тот, который находится ниже, прокомментировал, я получаю только пустое действие. – thechucklingatom

ответ

2

Удалить эту линию <item name="test_text_layout" type="id"/>

Создать файл в res/layout директории, вызовите его test_text_layout.xml и добавить следующее содержание

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

В коде активности

val cardAdapter = ArrayAdapter(ctx, R.layout.test_text_layout, arr) 

Причина проблемы - вы прошли неправильно параметр. От documentation

ресурсов междунар: Идентификатор ресурса для расположения файла, содержащего TextView использовать при инстанцировании взглядов.

Если вы хотите, чтобы избавиться от XML полностью, то вам нужно продлить ArrayAdapter

+0

И тогда нет способа связать это с пользовательским макетом, созданным Anko. Это то, что я начал принимать, тем больше я изучал его. Похоже, для приложения, которое я собираюсь, мне придется расширить ArrayAdapter. Спасибо, что подтвердили это. – thechucklingatom

+0

@ thechucklingatom приветствую вас, пинговать в чате, если вам понадобится помощь http://chat.stackoverflow.com/rooms/26424/iosandroidchaosoverflow –

Смежные вопросы