إجراء النقر على SimpleCursorAdapter
سؤال
أنا أستخدم هذا الرمز للحصول على البيانات من قاعدة البيانات وإظهارها مباشرةً في عرض القائمة المخصص الذي يتم عرضه بشكل صحيح.هذه هي الطريقة التي قمت بها باستخدام SimpleCursorAdapter
public void queryArticles(String querytext,Context mContext)
{
SQLiteDatabase db=this.getWritableDatabase();
Cursor cur=null;
String strquery="select rowid _id,part,A_name,italic,AS_name,Desc_art from Articles where AS_name LIKE '%"+querytext+"%'";
cur=db.rawQuery(strquery,null);
if(cur!=null&&cur.getCount() > 0)
{
do
{
String[] fromColumns = { "part", "A_name", "italic", "AS_name" };
int[] toViews = { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4 };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(mContext,R.layout.query_cell, cur, fromColumns, toViews, 0);
QueryFragment.listview1.setAdapter(adapter);
}
while(cur.moveToNext());
}
}
حاولت جعله عند النقر على هذا
QueryFragment.listview1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
داخل حلقة while، خارج شرط if، في نشاطي أيضًا ولكنه يمنحني هذا الاستثناء.
07-29 13:24:22.970: E/AndroidRuntime(25608): FATAL EXCEPTION: main
07-29 13:24:22.970: E/AndroidRuntime(25608): java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.widget.AdapterView.setOnClickListener(AdapterView.java:780)
07-29 13:24:22.970: E/AndroidRuntime(25608): at com.vivekwarde.indianconstitution.QueryFragment.onCreateView(QueryFragment.java:48)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.os.Handler.handleCallback(Handler.java:615)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.os.Handler.dispatchMessage(Handler.java:92)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.os.Looper.loop(Looper.java:137)
07-29 13:24:22.970: E/AndroidRuntime(25608): at android.app.ActivityThread.main(ActivityThread.java:4794)
07-29 13:24:22.970: E/AndroidRuntime(25608): at java.lang.reflect.Method.invokeNative(Native Method)
07-29 13:24:22.970: E/AndroidRuntime(25608): at java.lang.reflect.Method.invoke(Method.java:511)
07-29 13:24:22.970: E/AndroidRuntime(25608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
07-29 13:24:22.970: E/AndroidRuntime(25608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
07-29 13:24:22.970: E/AndroidRuntime(25608): at dalvik.system.NativeStart.main(Native Method)
لذلك، اعتدت setOnItemClickListener
مثله
listview1.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.v("hi","not getting called ? ");
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
ولكن لا يزال لا يتم تشغيل حدث setOnItemSelectedListener، هل لديك أي فكرة، كيف يمكن حل هذه المشكلة؟
المحلول
مشكلتك هنا ..
new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,.....
فقط قم بتغييره إلى
listview1.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//do your task
}
}
هنا position
سيساعدك على اكتشاف العنصر المحدد.. لذلك لا داعي لاستنزاف العقل في التحديد وعدم التحديد..
نصائح أخرى
جرب هذه الطريقة، ونأمل أن تساعدك على حل مشكلتك.
عرض القائمة
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
سبينر
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
أي عرض مثل (زر، TextView، ImageView الخ)
yourView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
لا تنتمي إلى StackOverflow