我有一个ListView,其中包含一些用户可以选择的项目。
我希望第一个元素显示为选中状态,并且在1或2秒后,所选项目将自动成为第二个元素。
我该怎么做?
选择项目时,例如可以使用粗体文本。
我有一个ListView的自定义适配器。
更新:
listview.setSelection(1);
System.out.println(listview.getSelectedItemPosition());
我用这个println测试了代码,但它返回“-1”。不选择任何行。
答案 0 :(得分:1)
有关ListView的精彩教程,请参阅本教程:http://www.vogella.com/tutorials/AndroidListView/article.html
返回原始问题以选择项目使用以下内容:
ListView.setSelection(int);
调用只会在没有用户直接输入的情况下更改UI。
对于延迟,您可以使用以下代码段:
final Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
ListView.setSelection(int);
}
}, 100);
有关如何更改所选项目的Android ListView背景颜色的信息,请参阅此post。
答案 1 :(得分:0)
如果您要求遍历列表并更改它的选择器,您可以使用这样的处理程序:
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override public void run() {
int currentSelectedIndex = mListView.getSelectedItemPosition();
if ((currentSelectedIndex + 1) < listCount) {
mListView.setSelection(currentSelectedIndex + 1);
} else {
mListView.setSelection(0);
}
handler.postDelayed(runnable, 1000);
}
};
然后在你的代码中,在onCreate()中调用例如:
handler.postDelayed(runnable, 1000);
这将根据您的需要每秒更改列表选择。
如果您确实要停止自动列表选择器,请调用:
handler.removeCallbacks(runnable);
答案 2 :(得分:0)
在没有直接用户输入的情况下自动更改UI会被视为不良用户体验,但如果要以编程方式选择ListView
中的项目,则可以调用
ListView.setSelection(int);
设置当前选定的项目。如果处于触摸模式,则该项目不会 被选中但仍然会被恰当地定位。如果 指定的选择位置小于0,然后是项目的位置 将选择0。
对于延迟,您需要将其置于处理程序中。
public class ListLooper {
private LoopHandler mHandler;
private ListView mListView;
public ListLooper(Activity activity) {
mListView = new ListView(activity);
mHandler = new LoopHandler(mListView);
}
private void start() {
mHandler.sendEmptyMessageDelayed(LoopHandler.MSG_LOOP, LoopHandler.DELAY);
}
private void stop() {
mHandler.removeMessages(LoopHandler.MSG_LOOP);
}
private static class LoopHandler extends Handler {
private static final int MSG_LOOP = 1;
private static final int DELAY = 2000;
/**
* Use a WeakReference so we don't keep an implicit reference to the Activity
*/
private WeakReference<ListView> mListRef;
private int mPosition;
private LoopHandler(ListView list) {
mListRef = new WeakReference<>(list);
}
@Override public void handleMessage(Message msg) {
super.handleMessage(msg);
// Check if we still have a reference to the ListView, and the Activity/Fragment hasn't been destroyed
if (mListRef.get() == null) {
return;
}
// If we're looping, run this code
if (msg.what == MSG_LOOP) {
int count = mListRef.get().getAdapter().getCount();
mListRef.get().setSelection(mPosition);
// If the position is less than the count, increment it, otherwise set it to 0
if (mPosition < count - 1) {
mPosition++;
} else {
mPosition = 0;
}
// Send the same message again, so we repeat this process
sendEmptyMessageDelayed(MSG_LOOP, DELAY);
}
}
}
答案 3 :(得分:0)
非常感谢!
这条指令:
listview.setSelection(int)
在我的代码中不起作用。
当我选择某个项目时,背景颜色变为蓝色。这是对的。 但是当刚刚加载活动时,没有自动选择项目。
答案 4 :(得分:0)
我使用performItemClick
并选中并突出显示该项,getSelectedItem
方法将返回正确的值:
ListView1.performItemClick(ListView1.getChildAt(1),1,ListView1.getItemIdAtPosition(1));
其中1
=列表中的位置