Java 如何在自定义列表视图中单击项目时启动新活动

Java 如何在自定义列表视图中单击项目时启动新活动,java,android,listview,Java,Android,Listview,我正在尝试启动新活动当我选择自定义列表视图的一个项目时,我在emulator上尝试了应用程序,但新活动未启动,该项目无法单击。。。!。为什么项目不可单击?有什么想法吗?有什么建议吗 以下是使用自定义列表视图的活动: package com.example.welcome.madrasti; import android.content.Intent; import android.database.Cursor; import android.support.v7.app.AppCompatA

我正在尝试启动新活动当我选择自定义列表视图的一个项目时,我在emulator上尝试了应用程序,但新活动未启动,该项目无法单击。。。!。为什么项目不可单击?有什么想法吗?有什么建议吗

以下是使用自定义列表视图的活动:

package com.example.welcome.madrasti;

import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class ListOfSchoolsPublic extends AppCompatActivity {

        Intent redirect;
        Intent item;
        ListView list;
        ArrayList<String>  _sa;
        DBAdapter db;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list_of_schools_public);

            openDB();

            list= (ListView) findViewById(R.id.usersList);

            redirect = getIntent();

            Cursor cursor = db.getAllRows();

            _sa= new  ArrayList<String>();

            //cursor.moveToFirst();

            Log.d("CURSORCOUNT","Number of rows in the Cursor is = " + String.valueOf(cursor.getCount()));




            while(cursor.moveToNext()) {

                if(cursor.getString(DBAdapter.COL_SChOOL_TYPE_TABLE_2).equals("حكومية"))
                _sa.add(cursor.getString(DBAdapter.COL_SCHOOLNAME_TABLE_2));

            }

            cursor.close();


            @SuppressWarnings("rawtypes")
            ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,_sa);

            list.setAdapter(new TempLyaout(ListOfSchoolsPublic.this,_sa));


           list.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
                {

                    String selectedItem = (String) arg0.getItemAtPosition(position);

                    itemInfo(selectedItem);
                }
            });



    }

    ///////////////////////////////////////////////////////////////

    public void itemInfo(String selectedItem){

           item = new Intent(getApplicationContext(), NewSchool.class);

           item.putExtra("schoolName",selectedItem);

           startActivity(item);

    }

    ///////////////////////////////////////////////////////////////
    @Override
    protected void onDestroy() {
        super.onDestroy();
        closeDB();

    }// end onDestroy method



    ///////////////////////////////////////////////////////////////

    private void openDB() {
        db = new DBAdapter(ListOfSchoolsPublic.this);
        db.open();
    } // end openDB method

    //////////////////////////////////////////////////////////////

    private void closeDB() {
        db.close();
    } // end closeDB method

}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ListOfSchoolsPublic">


    <ListView
        android:id="@+id/usersList"
        android:layout_width="395dp"
        android:layout_height="523dp"
        android:focusable="false"
        android:layout_x="4dp"
        android:layout_y="-1dp"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="7dp"></ListView>

</android.support.constraint.ConstraintLayout>
package com.example.welcome.madrasti;
导入android.content.Intent;
导入android.database.Cursor;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入java.util.ArrayList;
导入java.util.List;
SchoolPublic活动的公共类列表{
意图重定向;
意向项目;
列表视图列表;
ArrayList_sa;
DBAdapter-db;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u list\u of\u schools\u public);
openDB();
列表=(ListView)findViewById(R.id.usersList);
重定向=getIntent();
Cursor=db.getAllRows();
_sa=新的ArrayList();
//cursor.moveToFirst();
Log.d(“CURSORCOUNT”,“游标中的行数为=“+String.valueOf(Cursor.getCount())”);
while(cursor.moveToNext()){
if(cursor.getString(DBAdapter.COL_SChOOL_TYPE_TABLE_2).equals(“)
_add(cursor.getString(DBAdapter.COL_SCHOOLNAME_TABLE_2));
}
cursor.close();
@抑制警告(“原始类型”)
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple_list_item_1,_sa);
setAdapter(新模板输出(ListOfSchoolsPublic.this,_sa));
list.setOnItemClickListener(新的AdapterView.OnItemClickListener()
{
@凌驾
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3)
{
字符串selectedItem=(字符串)arg0.getItemAtPosition(位置);
itemInfo(selectedItem);
}
});
}
///////////////////////////////////////////////////////////////
public void itemInfo(字符串selectedItem){
item=newintent(getApplicationContext(),NewSchool.class);
item.putExtra(“学校名称”,选择编辑项);
起始触觉(项目);
}
///////////////////////////////////////////////////////////////
@凌驾
受保护的空onDestroy(){
super.ondestory();
closeDB();
}//端测法
///////////////////////////////////////////////////////////////
私有void openDB(){
db=新的DBAdapter(ListofSchoolPublic.this);
db.open();
}//结束openDB方法
//////////////////////////////////////////////////////////////
私有void closeDB(){
db.close();
}//结束closeDB方法
}
以下是列表视图的xml:

package com.example.welcome.madrasti;

import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class ListOfSchoolsPublic extends AppCompatActivity {

        Intent redirect;
        Intent item;
        ListView list;
        ArrayList<String>  _sa;
        DBAdapter db;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list_of_schools_public);

            openDB();

            list= (ListView) findViewById(R.id.usersList);

            redirect = getIntent();

            Cursor cursor = db.getAllRows();

            _sa= new  ArrayList<String>();

            //cursor.moveToFirst();

            Log.d("CURSORCOUNT","Number of rows in the Cursor is = " + String.valueOf(cursor.getCount()));




            while(cursor.moveToNext()) {

                if(cursor.getString(DBAdapter.COL_SChOOL_TYPE_TABLE_2).equals("حكومية"))
                _sa.add(cursor.getString(DBAdapter.COL_SCHOOLNAME_TABLE_2));

            }

            cursor.close();


            @SuppressWarnings("rawtypes")
            ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,_sa);

            list.setAdapter(new TempLyaout(ListOfSchoolsPublic.this,_sa));


           list.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
                {

                    String selectedItem = (String) arg0.getItemAtPosition(position);

                    itemInfo(selectedItem);
                }
            });



    }

    ///////////////////////////////////////////////////////////////

    public void itemInfo(String selectedItem){

           item = new Intent(getApplicationContext(), NewSchool.class);

           item.putExtra("schoolName",selectedItem);

           startActivity(item);

    }

    ///////////////////////////////////////////////////////////////
    @Override
    protected void onDestroy() {
        super.onDestroy();
        closeDB();

    }// end onDestroy method



    ///////////////////////////////////////////////////////////////

    private void openDB() {
        db = new DBAdapter(ListOfSchoolsPublic.this);
        db.open();
    } // end openDB method

    //////////////////////////////////////////////////////////////

    private void closeDB() {
        db.close();
    } // end closeDB method

}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ListOfSchoolsPublic">


    <ListView
        android:id="@+id/usersList"
        android:layout_width="395dp"
        android:layout_height="523dp"
        android:focusable="false"
        android:layout_x="4dp"
        android:layout_y="-1dp"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="7dp"></ListView>

</android.support.constraint.ConstraintLayout>

当您的列表项目中有一些可单击的项目时,此问题会出现

如果项目侦听器不工作,则可以在xml布局中的ListView上应用此功能

android:descendantFocusability="blocksDescendants" 
如果需要,您还可以在适配器类中多次单击侦听器,如

public class MyAdapter extends ArrayAdapter<Contact> {
        Context context;
        public MyAdapter(Context context, ArrayList<Contact> users) {
            super(context, 0, users);
            this.context = context;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            Contact user = getItem(position);

            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.listviewadapter, parent, false);
            }
            TextView name = convertView.findViewById(R.id.name);
            TextView num = convertView.findViewById(R.id.num);
            // Populate the data into the template view using the data object

            name.setText(user.name);
            num.setText(user.phone_number);
            // can set click on name or num
            name.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, position + "position clicked", Toast.LENGTH_SHORT).show();
                }
            });
            // can set click on full list item
            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, position + "position clicked", Toast.LENGTH_SHORT).show();
                }
            });
            return convertView;
        }
    }
公共类MyAdapter扩展了ArrayAdapter{
语境;
公共MyAdapter(上下文、ArrayList用户){
超级(上下文,0,用户);
this.context=上下文;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
联系人用户=getItem(位置);
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.listviewadapter,父项,false);
}
TextView name=convertView.findViewById(R.id.name);
TextView num=convertView.findViewById(R.id.num);
//使用数据对象将数据填充到模板视图中
name.setText(user.name);
num.setText(用户电话号码);
//可以设置单击名称或数值
name.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,位置+“单击位置”,Toast.LENGTH_SHORT.show();
}
});
//可以设置单击完整列表项
convertView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,位置+“单击位置”,Toast.LENGTH_SHORT.show();
}
});
返回视图;
}
}

为什么要使用list.setAdapter(新模板输出(listofschoolpublic.this,_sa);而不是list.setAdapter(适配器)