2014-11-14 2 views
1

Я пытаюсь показать список в Sony Smartwatch 2 в классе управления. Я делаю то же, что и для TextView:Listview в Sony Smartwatch 2

// Подготовьте пакет для обновления текста. Bundle bundle1 = new Bundle();

bundle1.putInt(Control.Intents.EXTRA_LAYOUT_REFERENCE, R.id.text); 
    bundle1.putString(Control.Intents.EXTRA_TEXT, "Helloooooo"); 

И это работает отлично, но я не знаю, как это сделать для ListView, что-то вроде этого не работает:

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

    final ArrayList<String> list = new ArrayList<String>(); 
    for (int i = 0; i < values.length; ++i) { 
     list.add(values[i]); 
     } 
    final StableArrayAdapter adapter = new StableArrayAdapter(this,android.R.layout.simple_list_item_1, list); 

    // Prepare a bundle to update the button text. 
    Bundle bundle1 = new Bundle(); 

    bundle1.putInt(Control.Intents.EXTRA_LAYOUT_REFERENCE, R.id.list); 
    bundle1.putStringArray(Control.Intents.EXTRA_DATA, values); 

Пожалуйста, помогите мне: S, я думаю, что это что-то вроде этого:

 Bundle b = new Bundle(); 
     b.putInt(Control.Intents.EXTRA_DATA_XML_LAYOUT, 
      R.layout.smartwatch2_item); 
     b.putInt(Control.Intents.EXTRA_LIST_ITEM_ID, i); 
     b.putInt(Control.Intents.EXTRA_LIST_ITEM_POSITION, i); 
     b.putParcelableArray(Control.Intents.EXTRA_LAYOUT_DATA, views); 

ответ

1

Элементы ListView SmartWatch может быть отправлены только sendListItem (ControlListItem пункт). Обычно sendListItem вызывается в обратном вызове onRequestListItem. onRequestListItem вызывается, когда вызывается sendListCount и sendListPosition.

Итак, вы не должны отправлять товар по адаптеру, должны вызывать sendListCount и sendListPostion.

ControlListItem имеет dataXmlLayout и layoutData. dataXmlLayout должен быть макетом элемента. layoutData должен быть массивом bundle.

public void onResume(int layoutReference, int listItemPosition) { 
    showLayout(YOUR_LAYOUT_HAS_LIST_VIEW); 
    sendListCount(values.length); 
    sendListPosition(YOUR_LIST_VIEW, 0); 
} 
public void onRequestListItem(int layoutReference, int listItemPosition) { 
    ControlListItem item = new ControlListItem(); 
    item.layoutReference = layoutReference; 
    item.dataXmlLayout = android.R.layout.simple_list_item_1; 
    item.listItemId = listItemPosition; 
    item.listItemPosition = listItemPosition; 
    item.layoutData = new Bundle[1]; 
    item.layoutData[0] = new Bundle(); 
    item.layoutData[0].putInt(Control.Intents.EXTRA_LAYOUT_REFERENCE, android.R.id.text1); 
    item.layoutData[0].putString(Control.Intents.EXTRA_TEXT, values[listItemPosition]); 
    sendListItem(item); 
} 

Обратите внимание, что поддержка макетов SmartWatch ограничена.

+0

спасибо !! Это решение. – xarrate

0

Вы создали адаптер, но не добавили адаптер в список.

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

Чтобы получить доступ к представлению списка из макета, добавьте следующий код

ListView lv = (ListView) this.findViewById(R.id.yourlistviewIDname)); 

ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, your_list); 

lv.setAdapter(adapter); 
+0

Уважаемый @VikramEzhil Я пытаюсь сделать это для Smartwatch, а код адаптера не работает в Smartwatch. Я думаю, что мне нужно что-то сделать с EXTRA_LIST_ITEM_ID – xarrate

+0

Извините, если честно, я не знал, что для смарт-часов это было по-другому. Правильное решение было хорошей кривой обучения для меня. –

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