用户按下排序按钮后如何在listview中显示排序列表?

时间:2018-02-27 09:55:38

标签: android listview

我正在制作一个简单的Android应用程序来测试排序功能,然后在我将要制作的主项目中使用它。

我想知道,假设我在listview的自定义对象和自定义ArrayAdapter的帮助下向用户显示了一个项目列表,我希望在那里放置一个排序按钮,根据选择在运行时对列表进行排序用户(例如:按字母顺序,根据评级等)。

如何在排序后向用户显示新列表。

我应该再次使用setAdapter方法还是有其他方法吗?

3 个答案:

答案 0 :(得分:1)

当您点击 排序按钮按列表排序并在下一行写 < / p>

yourAdapter.notifyDatasetChanged();

它会使用 更新(已排序)数据更新您的列表。

答案 1 :(得分:1)

首先,根据用户的选择对源数据进行排序(例如:按字母顺序,根据评级等)。 例如:

class Communicate(QtCore.QObject):
    myGUI_signal = QtCore.pyqtSignal(str)

def myThread(callbackFunc):
# Setup the signal-slot mechanism.
    mySrc = Communicate()
    mySrc.myGUI_signal.connect(callbackFunc)

# Endless loop. You typically want the thread
# to run forever.
    while(True):
    # Do something useful here.
        msgForGui = 'This is a message to send to the GUI'
        mySrc.myGUI_signal.emit(msgForGui)


FORM_CLASS, _ = loadUiType(os.path.join(os.path.dirname('__file__'), "main.ui"))

class MainApp(QMainWindow, FORM_CLASS):  # QMainWindow refere to window type used in ui file
# this is constructor
    def __init__(self, parent=None):
        super(MainApp, self).__init__(parent)
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.ui()
        self.actions()

    def ui(self):
        self.setFixedSize(848, 663)

    def actions(self):
        self.pushButton.clicked.connect(self.startTheThread)

    def theCallbackFunc(self, msg):
        print('the thread has sent this message to the GUI:')
        print(msg)
        print('---------')

    def startTheThread(self):
    # Create the new thread. The target function is 'myThread'. The
    # function we created in the beginning.
        t = threading.Thread(name = 'myThread', target = myThread, args =(self.theCallbackFunc))
        t.start()

def main():
    app = QApplication(sys.argv)
    window = MainApp()  # calling class of main window (first window)
    window.show()  # to show window
    app.exec_()  # infinit loop to make continous show for window

if __name__ == '__main__':
    main()

答案 2 :(得分:0)

如果您在适配器中拨打notifyDatasetChanged(),您的列表将按照屏幕上的正确顺序重新绘制。 :)因此,在您订购列表后,请致电adapter.notifyDatasetChanged()