Android setOnItemClickListener在片段活动中不工作
单击ListView项时,我正在尝试显示Toast。我在这个网站上读了一些以前的帖子,试图解决这个问题。但这对我不起作用。我怎样才能解决这个问题 以下是片段活动的代码:Android setOnItemClickListener在片段活动中不工作,android,listview,Android,Listview,单击ListView项时,我正在尝试显示Toast。我在这个网站上读了一些以前的帖子,试图解决这个问题。但这对我不起作用。我怎样才能解决这个问题 以下是片段活动的代码: import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.widget.SimpleCursorAdapter; import androi
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.ListView;
import android.widget.Toast;
public class SinFragment extends Fragment {
private static SimpleCursorAdapter dataAdapter;
private static String[] columns;
private static int[] to;
private static ListView listView;
private static Cursor cursor;
private static TestAdapter dbHelper;
public SinFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Open Exiting Database
dbHelper = new TestAdapter(getContext());
dbHelper.createDatabase();
dbHelper.open();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sin, container, false);
//Get data from Database to ListView
setListView(view);
return view;
}
public void setListView(View view){
cursor = dbHelper.getSiDic();
columns = new String[] {
"word",
"definition",
};
to = new int[] {
R.id.word,
R.id.definition,
};
dataAdapter = new SimpleCursorAdapter(
getContext(), R.layout.item_sin,
cursor,
columns,
to,
0);
// Assign adapter to ListView
listView = (ListView)view.findViewById(R.id.listview);
listView.setAdapter(dataAdapter);
final EditText search = (EditText)view.findViewById(R.id.search);
//Clear text of EditText when click the clear button at right side of EditText
search.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;
if(event.getAction() == MotionEvent.ACTION_UP) {
if(event.getRawX() >= (search.getRight() - search.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
search.setText("");
return true;
}
}
return false;
}
});
//Search user's input form Database
search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
dataAdapter.getFilter().filter(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return dbHelper.getSiDicByName(constraint.toString());
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor cursor = (Cursor) listView.getItemAtPosition(position);
String word = cursor.getString(cursor.getColumnIndexOrThrow("word"));
String definition = cursor.getString(cursor.getColumnIndexOrThrow("definition"));
Log.v("Click Item", word + " is clicked");
Toast.makeText(getContext(), word + " is clicked", Toast.LENGTH_SHORT).show();
}
});
}
}
导入android.database.Cursor;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.widget.SimpleCursorAdapter;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.EditText;
导入android.widget.FilterQueryProvider;
导入android.widget.ListView;
导入android.widget.Toast;
公共类SinFragment扩展了片段{
专用静态SimpleCursorAdapter数据适配器;
私有静态字符串[]列;
私有静态int[]到;
私有静态ListView ListView;
私有静态游标;
私有静态测试适配器dbHelper;
公共服务{
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//打开现有数据库
dbHelper=newtestadapter(getContext());
dbHelper.createDatabase();
dbHelper.open();
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u sin,容器,false);
//将数据从数据库获取到ListView
setListView(视图);
返回视图;
}
公共void setListView(视图){
cursor=dbHelper.getSiDic();
columns=新字符串[]{
“字”,
“定义”,
};
to=新整数[]{
R.id.word,
R.id.定义,
};
dataAdapter=新的SimpleCorsorAdapter(
getContext(),R.layout.item_sin,
光标,
柱,
到
0);
//将适配器分配给ListView
listView=(listView)view.findViewById(R.id.listView);
setAdapter(dataAdapter);
final EditText search=(EditText)view.findViewById(R.id.search);
//单击EditText右侧的清除按钮时清除EditText的文本
search.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
最终整数可绘制_左=0;
最终int可拉伸_TOP=1;
最终int可绘制的_右=2;
最终int可拉伸_底=3;
if(event.getAction()==MotionEvent.ACTION\u UP){
如果(event.getRawX()>=(search.getRight()-search.getCompoundDrawables()[DRAWABLE\u RIGHT].getBounds().width()){
search.setText(“”);
返回true;
}
}
返回false;
}
});
//搜索用户的输入表单数据库
search.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
dataAdapter.getFilter().filter(s.toString());
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
setFilterQueryProvider(新的FilterQueryProvider(){
公共游标运行查询(CharSequence约束){
返回dbHelper.getSiDicByName(constraint.toString());
}
});
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
游标游标=(游标)listView.getItemAtPosition(位置);
String word=cursor.getString(cursor.getColumnIndexOrThrow(“word”);
字符串定义=cursor.getString(cursor.getColumnIndexOrThrow(“定义”);
Log.v(“点击项目”,点击word+);
Toast.makeText(getContext(),word+“已单击”,Toast.LENGTH_SHORT.show();
}
});
}
}
更新:
片段xml的代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:orientation="vertical"
tools:context="com.mecduino.dicmec.SinFragment">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/search"
android:padding="10dp"
android:drawableLeft="@android:drawable/ic_menu_search"
android:drawableRight="@android:drawable/ic_menu_close_clear_cancel"
android:hint="Search..."
android:background="@drawable/border"
android:inputType="text" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="10dp"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listview" />
</LinearLayout>
_sin.xml项的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.5">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/word"
android:padding="5dp"
android:textSize="12dp"
android:capitalize="words" />
</LinearLayout>
<LinearLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:lineSpacingMultiplier="1.5"
android:padding="5dp"
android:id="@+id/definition"
android:textSize="15dp" />
</LinearLayout>
</LinearLayout>
border.xml的代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffff" />
<stroke android:width="1dip" android:color="#ce4416" />
<corners
android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp"/>
</shape>
不显示任何错误..在Toast中使用getApplicationContext()而不是getContext()显示xml、项和列表尝试。对我来说,这是:游标游标=(游标)listView.getItemAtPosition(位置);这似乎是错误的。我假设您一定得到了错误@Ritesh Gune:实际上,当我在ListView中单击项目时,我需要显示弹出的AlertDialog对话框。我需要测试SetonicClickListener的操作。这就是敬酒的目的。还有,为什么不是work Log.v(“单击项”,单击word+);