Java 图像按钮聚焦但不可单击

Java 图像按钮聚焦但不可单击,java,android,Java,Android,我有一个对话框弹出列表,列出所有的应用程序,并通过此按钮启动它们 private void addClickListener(){ list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override`` public void onItemClick(AdapterView<?> av, View v, int pos, long i

我有一个对话框弹出列表,列出所有的应用程序,并通过此按钮启动它们

private void addClickListener(){
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override``
            public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
                Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString());
                AllApps.this.startActivity`(i);
            }
        });

弹出对话框中图像按钮和文本的Xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:id="@+id/item_app_icon"
    android:layout_width="250dp"
    android:layout_height="100dp"
    android:layout_alignParentLeft="true"
    android:gravity="right"
    android:background="@drawable/border_image"
    android:focusable="true"/>
<TextView
    android:id="@+id/item_app_label"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/item_app_icon"
    android:paddingTop="10dp"
    android:background="#26F0F8FF"
    android:textColor="@android:color/black"
    android:textSize="15dp"
    android:gravity="center"/>

这是对话框弹出代码

protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_apps);
    loadApps();
    loadListView();
    addClickListener();
    //onfocus();

    adpter = new dbAdapter(this);
    adpter.open();


    //addLongClickListener();
}

private void loadApps() {
    manager = getPackageManager();
    apps = new ArrayList<AppDetail>();

    Intent i = new Intent(Intent.ACTION_MAIN, null);
    i.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0);

    for (ResolveInfo ri : availableActivities) {
        AppDetail app = new AppDetail();
        app.label = ri.loadLabel(manager);
        app.name = ri.activityInfo.packageName;
        app.icon = ri.activityInfo.loadIcon(manager);
        //String name= app.name.toString();
        //String icon = app.icon.toString();
        //adpter.createApp(name,icon);
        if (app.name.equals("com.bux.launcher")){

        }
        else {
            apps.add(app);
        }
    }
}

private void loadListView() {
    list = (GridView) findViewById(R.id.apps_list);

    ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this, R.layout.list_item, apps) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.list_item, null);
            }

            ImageButton appIcon = (ImageButton) convertView.findViewById(R.id.item_app_icon);
            appIcon.setImageDrawable(apps.get(position).icon);

            appIcon.setFocusable(true);
            appIcon.setFocusableInTouchMode(true);
            appIcon.setClickable(true);




            TextView appLabel = (TextView) convertView.findViewById(R.id.item_app_label);
            appLabel.setText(apps.get(position).label);



            return convertView;
        }
    };



    registerForContextMenu(list);
    list.setAdapter(adapter);
}

private void addClickListener(){
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> av, View v, int pos,
                                long id) {
            Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString());
            AllApps.this.startActivity(i);
        }
    });

}
创建时受保护的void(Bundle savedInstanceState){
requestWindowFeature(窗口。功能\u无\u标题);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u所有应用程序);
loadApps();
loadListView();
addClickListener();
//onfocus();
adpter=新的dbAdapter(本);
adpter.open();
//addLongClickListener();
}
私有void loadApps(){
manager=getPackageManager();
apps=newarraylist();
意向i=新意向(意向.行动\主,空);
i、 addCategory(意图.类别\发射器);
List availableActivities=manager.querytentActivities(i,0);
for(ResolveInfo ri:availableActivities){
AppDetail app=新的AppDetail();
app.label=ri.loadLabel(管理器);
app.name=ri.activityInfo.packageName;
app.icon=ri.activityInfo.loadIcon(管理器);
//字符串名称=app.name.toString();
//String icon=app.icon.toString();
//adpter.createApp(名称、图标);
if(app.name.equals(“com.bux.launcher”)){
}
否则{
apps.add(app);
}
}
}
私有void loadListView(){
列表=(GridView)findViewById(R.id.apps\u列表);
ArrayAdapter=新的ArrayAdapter(此,R.layout.list_项,应用程序){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=GetLayoutFlater()。充气(R.layout.list_项,空);
}
ImageButton appIcon=(ImageButton)convertView.findViewById(R.id.item\u app\u图标);
appIcon.setImageDrawable(apps.get(position.icon));
appIcon.setFocusable(true);
appIcon.setFocusableInTouchMode(true);
appIcon.setClickable(真);
TextView appLabel=(TextView)convertView.findViewById(R.id.item\u app\u label);
appLabel.setText(apps.get(position.label));
返回视图;
}
};
registerForContextMenu(列表);
list.setAdapter(适配器);
}
私有void addClickListener(){
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共空间和MClick(AdapterView av、View v、int pos、,
长id){
Intent i=manager.getLaunchIntentForPackage(apps.get(pos.name.toString());
阿拉普斯。本。星触觉(i);
}
});
}

将android:genderantfocusability=“blocksDescendants”添加到您的根视图中

将android:genderantfocusability=“blocksDescendants”添加到您的根视图中

您需要在drawable中创建一个XML文件,然后将以下代码粘贴到该文件中,用于选择器和其他图像

<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item
        android:state_pressed="true"

        android:drawable="@drawable/search_sel" />
    <item
        android:drawable="@drawable/search" />
</selector>

您需要在drawable中创建XML文件,然后将以下代码粘贴到选择器和其他图像中

<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item
        android:state_pressed="true"

        android:drawable="@drawable/search_sel" />
    <item
        android:drawable="@drawable/search" />
</selector>



我注意到在您的问题中,您提到了ImageButtons,但您使用的是ImageView。尝试将
更改为

我注意到在您的问题中,您提到的是ImageButtons,但您使用的是ImageView。尝试将
更改为

共享您的活动代码。共享完整的xml代码共享您的活动代码。共享完整的xml代码我已经创建了一个名为border\u image的xml文件,带有聚焦状态选择器。我已经在我的问题上添加了它。然后简单地在你的按钮中使用这个可绘制的,就像这个android:background=“@drawable/border\u image”如果你查看我的代码,我已经使用它作为android:background for ImageView我已经创建了一个名为border\u image的xml文件,带有聚焦状态选择器。我已经在我的问题上添加了它。然后简单地在你的按钮中使用这个可绘制的,就像这个android:background=“@drawable/border\u image”如果你查看我的代码,我已经使用它作为android:background for ImageView和这个I块焦点,所以它不会突出显示我的imageButtons。。。。我希望imageButtons是可聚焦的(改变它们的背景)并且可以点击来启动intent…通过这个我阻止聚焦,所以它不会突出显示我的imageButtons。。。。我希望imagebutton是可聚焦的(改变它们的背景)并且可以点击来启动intent…我已经将其更改为imagebutton,但我得到了相同的结果。单击网格中的“图像”按钮时,它只会聚焦,不会启动它的意图。您可以为您的
列表发布其余的代码吗?我假设您使用的是listView?在显示
Intent I=manager…
的行中放置一个调试器,然后查看这一行是否执行。如果没有,那么设置侦听器的方式就有问题。我有一个gridview,如果我没有正确设置可聚焦的意图就是启动。当我将imageButtons设置为焦点时,我只获得每个按钮的焦点。这是我的onClickListner函数:private void addClickListener(){list.setOnItemClickListener(新AdapterView.OnItemClickListener(){@Override public void onItemClick(AdapterView av,View v,int pos,long id){Intent i=manager.getLaunchIntentForPackage(apps.get(pos.name.toString());AllApps.this.startActivity(i);}}}}我已将其更改为imagebutton,但我得到了相同的结果。当网格中的图像按钮被单击时,它只会聚焦,而不会启动它的意图。你能为你的
列表发布其余的代码吗?
?我假设你使用的是listView?在显示
intent I=manager…
的行放置一个调试器,然后查看这一行是否为ex已执行。如果未执行,则您设置侦听器的方式有问题。我有一个gridview,如果我未正确设置可聚焦的意图,则启动。当我将imageButtons设置为可聚焦时,我仅获得焦点
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item
        android:state_pressed="true"

        android:drawable="@drawable/search_sel" />
    <item
        android:drawable="@drawable/search" />
</selector>