Android Andrlid ListView焦点混乱
在我的应用程序中,我想实现一个ListView,其中每个itemview都是一个线性布局,其中有两个可聚焦的按钮,并且每行item数据都从页面中的服务器加载。但似乎在调用adapter.notifyDataSetChanged时,如果焦点在itemview的右按钮上,它将跳转到左按钮。有什么办法可以使焦点稳定吗 下面是我重现问题的示例代码。有人能帮忙提些建议吗?谢谢Android Andrlid ListView焦点混乱,android,listview,focus,Android,Listview,Focus,在我的应用程序中,我想实现一个ListView,其中每个itemview都是一个线性布局,其中有两个可聚焦的按钮,并且每行item数据都从页面中的服务器加载。但似乎在调用adapter.notifyDataSetChanged时,如果焦点在itemview的右按钮上,它将跳转到左按钮。有什么办法可以使焦点稳定吗 下面是我重现问题的示例代码。有人能帮忙提些建议吗?谢谢 package com.listviewfocus; import java.util.Vector; import andr
package com.listviewfocus;
import java.util.Vector;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
public class SimpleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView list = new ListView(this);
final MyAdapter adapter = new MyAdapter();
list.setItemsCanFocus(true);
list.setAdapter(adapter);
setContentView(list);
final Handler handler = new Handler();
new Thread(new Runnable(){
public void run() {
while(true) {
handler.post(new Runnable() {
public void run() {
adapter.addItem(System.currentTimeMillis()+"");
}
});
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
class MyAdapter extends BaseAdapter {
private Vector<String> items = new Vector<String>();
public MyAdapter() {
}
public void addItem(String s) {
items.add(s);
this.notifyDataSetChanged();
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout view;
if (convertView instanceof LinearLayout) {
view = (LinearLayout) convertView;
} else {
view = new LinearLayout(parent.getContext());
Button b1 = new Button(parent.getContext());
Button b2 = new Button(parent.getContext());
view.addView(b1);
view.addView(b2);
}
((Button)(((ViewGroup) view).getChildAt(0))).setText(position+":b1");
((Button)(((ViewGroup) view).getChildAt(1))).setText(position+":b2");
return view;
}
}
}
package com.listviewfocus;
导入java.util.Vector;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Handler;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.LinearLayout;
导入android.widget.ListView;
公共类SimpleActivity扩展了活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ListView列表=新的ListView(此);
最终MyAdapter=新MyAdapter();
list.setItemsCanFocus(true);
list.setAdapter(适配器);
setContentView(列表);
最终处理程序=新处理程序();
新线程(newrunnable()){
公开募捐{
while(true){
handler.post(新的Runnable(){
公开募捐{
adapter.addItem(System.currentTimeMillis()+);
}
});
试一试{
Thread.currentThread().sleep(5000);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}).start();
}
类MyAdapter扩展了BaseAdapter{
私有向量项=新向量();
公共MyAdapter(){
}
公共void附加项(字符串s){
项目。添加(s);
this.notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
线性布局视图;
if(线性布局的convertView实例){
视图=(线性布局)转换视图;
}否则{
视图=新的LinearLayout(parent.getContext());
按钮b1=新按钮(parent.getContext());
按钮b2=新按钮(parent.getContext());
视图。添加视图(b1);
视图。添加视图(b2);
}
((按钮)((视图组)视图).getChildAt(0)).setText(位置+“:b1”);
((按钮)((视图组)视图).getChildAt(1)).setText(位置+“:b2”);
返回视图;
}
}
}