我正在尝试在加载时将焦点设置在列表视图上。我有一个要求,我想在列表视图上实现导航,就像按下向上按钮时我希望它向上移动一步,类似于向下按钮。直到现在我已经尝试了几乎所有的方法,比如 设置选择(位置),listview.requestfocus(),list.setSelected(true),list.setItemsCanFocus(true)但到目前为止还没有任何工作。 我也试过这个方法来获取列表视图中的视图,它工作正常:
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
then I am getting the view and trying to set focus..however it does not work
runOnUiThread(new Runnable() {
public void run() {
getViewByPosition(0, list);
View v = getViewByPosition(0, list);
Log.v("WifiScanReceiver", "View found: " + v);
v.setFocusable(true);
v.setFocusableInTouchMode(true);
v.requestFocus();
}
});
任何有关重点的建议都会受到赞赏。我已经研究了很多,到目前为止还没有任何工作。
public class MainActivity extends Activity {
ListView listView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get ListView object from xml
listView = (ListView) findViewById(R.id.list);
// Defined Array values to show in ListView
String[] values = new String[] { "Android List View",
"Adapter implementation",
"Simple List View In Android",
"Create List View Android",
"Android Example",
"List View Source Code",
"List View Array Adapter",
"Android Example List View"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
listView.setAdapter(adapter);
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(0);
}
});
答案 0 :(得分:3)
大家好,非常感谢你们的回复,他们都非常有帮助。然而,确切的事情是:
list.post(new Runnable() {
@Override
public void run() {
list.getChildAt(indexPos + 1).setBackgroundColor(
Color.RED);
list.getChildAt(indexPos).setBackgroundColor(
Color.BLACK);
// String selectedFromList = (String) (list
// .getItemAtPosition(0));
Log.v("Case2", "Selected text is:" + selectedFromList);
}
如果我将列表背景显示为红色并且选定的索引我将背景更改为黑色。
答案 1 :(得分:1)
取决于某些设备,它可能有也可能没有视觉效果(背景突出显示)。因此,将一些焦点颜色设置为该视图
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(focusedPosition);
View v = getViewByPosition(0, list);
v.setBackgroundResource(R.color.black);
}
});
答案 2 :(得分:1)
使用此代码
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.drawer_list_item, R.id.text1, values) {
public View getView(int pos, View convertView,
android.view.ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.drawer_list_item, null);
}
TextView tv =(TextView) v.findViewById(R.id.text1);
tv.setText(String.valueOf(values[pos]));
if (pos == 0) {
tv.setBackgroundColor(Color.BLUE);
}
return v;
}
};
listView.setAdapter(adapter);
答案 3 :(得分:1)
A)文档说,只有在onResume
方法被调用后才能安全地触摸您的观看次数。
B)我有同样的问题......我的解决方案非常简单:D
@Override
protected void Resume() {
//do whatever you need here
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
listView.requestFocus();
},500);//the delay period can be changed, of course
}