Java 如何在自定义列表视图中单击项目时启动新活动
我正在尝试启动新活动当我选择自定义列表视图的一个项目时,我在emulator上尝试了应用程序,但新活动未启动,该项目无法单击。。。!。为什么项目不可单击?有什么想法吗?有什么建议吗 以下是使用自定义列表视图的活动: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
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(适配器)