4

ListAdapter を使用して、ListView にデータを表示します。

コードから ListView の項目を選択するにはどうすればよいですか?

4

2 に答える 2

5

メソッドをListAdapter使用してリスト項目を取得できます。get_view()リスト項目が の場合、 mixinのメソッドをListItemButton使用してプレスをシミュレートできます(の親であり、の親です)。これもイベントをトリガーするため、これを通常の選択と区別するために変数が必要になる場合があります。例:trigger_action()ButtonBehaviorButtonBehaviorButtonButtonListItemButtonon_selection_change

from kivy.uix.listview import ListView, ListItemButton
from kivy.uix.boxlayout import BoxLayout
from kivy.adapters.dictadapter import ListAdapter
from kivy.uix.button import Button
from random import randint

class MainView(BoxLayout):
    def __init__(self, **kwargs):
        kwargs['cols'] = 2
        super(MainView, self).__init__(**kwargs)
        self.orientation = 'vertical'

        self.list_adapter = ListAdapter(data=["Item #{0}".format(i) for i in range(10)], cls=ListItemButton, sorted_keys=[])
        self.list_adapter.bind(on_selection_change=self.selection_change)
        list_view = ListView(adapter=self.list_adapter)
        self.add_widget(list_view)
        self.add_widget(Button(text="select random item", on_press=self.callback))

    def callback(self, instance):
        index = randint(0, 9)
        self.change_from_code = True
        if not self.list_adapter.get_view(index).is_selected:
            self.list_adapter.get_view(index).trigger_action(duration=0)
        self.change_from_code = False

    def selection_change(self, adapter, *args):
        if self.change_from_code:
            print "selection change from code"
        else:
            print "selection changed by click"

if __name__ == '__main__':
    from kivy.base import runTouchApp
    runTouchApp(MainView(width=800))
于 2013-10-25T22:12:26.057 に答える
2

ListAdapter 関数handle_selectionは既にこれを処理しています。ドキュメントにはありませんが、コードにはあります。知っておく必要があるのは、探しているリスト アイテムだけです。

item =  list_adapter.get_data_item(0)
list_adapter.handle_selection(item)

イベントを発生させたくない場合は、 をon_selection_change追加しTrueます。これはhandle_selection、ディスパッチを起動しないように指示します。

item =  list_adapter.get_data_item(0)
list_adapter.handle_selection(item, True)
于 2015-09-11T18:57:17.813 に答える