Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Andrlid ListView焦点混乱_Android_Listview_Focus - Fatal编程技术网

Android Andrlid ListView焦点混乱

Android Andrlid ListView焦点混乱,android,listview,focus,Android,Listview,Focus,在我的应用程序中,我想实现一个ListView,其中每个itemview都是一个线性布局,其中有两个可聚焦的按钮,并且每行item数据都从页面中的服务器加载。但似乎在调用adapter.notifyDataSetChanged时,如果焦点在itemview的右按钮上,它将跳转到左按钮。有什么办法可以使焦点稳定吗 下面是我重现问题的示例代码。有人能帮忙提些建议吗?谢谢 package com.listviewfocus; import java.util.Vector; import andr

在我的应用程序中,我想实现一个ListView,其中每个itemview都是一个线性布局,其中有两个可聚焦的按钮,并且每行item数据都从页面中的服务器加载。但似乎在调用adapter.notifyDataSetChanged时,如果焦点在itemview的右按钮上,它将跳转到左按钮。有什么办法可以使焦点稳定吗

下面是我重现问题的示例代码。有人能帮忙提些建议吗?谢谢

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”);
返回视图;
}
}
}