方法onFocusChangeListener只调用一次

时间:2014-06-20 16:59:03

标签: android

我正在开发示例应用以测试OnFocusChangeListener,我在它的方法public void onFocusChange(View v, boolean hasFocus)上保留了调试点,我观察到该方法只调用一次,即在启动应用程序之后,向上这很好但是当我向下滚动到下一个列表项时,项目被聚焦但是方法没有被调用。我知道我错过了一些小事。能帮我摆脱这个问题吗?提前谢谢。

注意使用遥控器的D-Pad进行滚动

java class:

package com.example.listview;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ListActivity extends Activity implements OnFocusChangeListener{
    String[] items={"iOS","android","Symbian",};
    //GridView lst;
    ListView lst;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        lst=(ListView)findViewById(R.id.listView1);

        lst.setFocusableInTouchMode(false);

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1,items);
        lst.setAdapter(adapter);


        }



    public void onFocusChange(View v, boolean hasFocus) {

        Toast.makeText(getBaseContext(), "FOCUSED", Toast.LENGTH_LONG).show();      
    }
}

2 个答案:

答案 0 :(得分:3)

当您使用跟踪球或遥控器使其高亮显示时调用焦点(不触摸。例如可以在Android电视中使用左,上,下,右按钮进行导航。)

你需要一个onItemSelected来进行选择。 onItemClickListener单击。

答案 1 :(得分:1)

我找到了解决问题的方法,但我仍然不知道为什么OnFocuschangeListener无效?我通过实施OnItemSelectedListener

解决了这个问题
package com.example.listview;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ListActivity extends Activity implements OnItemSelectedListener{
    String[] items={"iOS","android","Symbian",};
    //GridView lst;
    ListView lst;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        lst=(ListView)findViewById(R.id.listView1);

        lst.setFocusableInTouchMode(false);

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1,items);
        lst.setAdapter(adapter);


        }



    @Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
        long id)
}