Список в Sony Smartwatch 2

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

// Подготовить пакет для обновления текста. Пакет bundle1 = новый 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);

person xarrate    schedule 14.11.2014    source источник


Ответы (2)


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

Таким образом, вы не должны отправлять элемент с помощью адаптера, следует вызывать sendListCount и sendListPostion.

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

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 ограничена.

person leak4mk0    schedule 16.11.2014
comment
Спасибо!! Это решение. - person xarrate; 17.11.2014

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

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

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

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);
person Vikram Ezhil    schedule 14.11.2014
comment
Уважаемый @VikramEzhil, я пытаюсь сделать это для Smartwatch, но код адаптера не работает в Smartwatch. Думаю, мне нужно что-то сделать с EXTRA_LIST_ITEM_ID - person xarrate; 14.11.2014
comment
Извините, если честно, я не знал, что это по-другому для умных часов. Однако правильное решение было хорошей кривой обучения для меня. - person Vikram Ezhil; 18.11.2014