我正在制作一个简单的Android应用程序来测试排序功能,然后在我将要制作的主项目中使用它。
我想知道,假设我在listview的自定义对象和自定义ArrayAdapter的帮助下向用户显示了一个项目列表,我希望在那里放置一个排序按钮,根据选择在运行时对列表进行排序用户(例如:按字母顺序,根据评级等)。
如何在排序后向用户显示新列表。
我应该再次使用setAdapter方法还是有其他方法吗?
答案 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()