2012-12-12 38 views
1

我有下面的代碼,當我點擊每一行時,它沒有註冊onclick事件,並且日誌沒有顯示。自定義適配器onClick沒有註冊點擊

我可能在做一些愚蠢的事情,所以任何幫助真的將不勝感激。

public void loadTable(){ 
    File dbfile = new File(Global.currentDBfull); 
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 

    mItemName.clear(); 
    mItemID.clear(); 
    adapter.notifyDataSetChanged(); 

    String SQLStatement = "select * from assets where areaobjectid = '" + StationObjectID + "' and CriticalAsset = 'Y'"; 
    Log.e("SQLSTATEMENT", SQLStatement); 

    String intCount = "0"; 

    Cursor c = db.rawQuery(SQLStatement, null); 
    if(c.getCount() != 0) { 

    c.moveToFirst(); 
    while(!c.isAfterLast()) { 

     mItemName.add(c.getString(c.getColumnIndex("Description"))); 
     mArrayClick.add(c.getString(c.getColumnIndex("StationObjectID"))); 
     mItemStatus.add(c.getString(c.getColumnIndex("ConditionID"))); 
     Log.e("MITEMSTATUS",c.getString(c.getColumnIndex("ConditionID"))); 


     c.moveToNext(); 

    } 

    rowCount = mItemName.size(); 

    listView = (ListView) findViewById(R.id.lvAssets); 
    adapter.notifyDataSetChanged(); 
    int[] colors = {0, 0xFFFF0000, 0}; 
    listView.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors)); 
    listView.setDividerHeight(1); 

    listView.setAdapter(adapter); 


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

      Log.e("TOMTEST", "Clicked"); 

      } 
     }); 


    } else { 

     Log.e("Assessment", "No Results"); 


    } 

    db.close(); 
} 

class CustomAdapter extends BaseAdapter 
{ 

    @Override 
    public int getCount() { 

     return mItemName.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 

     return null; 
    } 

    @Override 
    public long getItemId(int arg0) { 

     return 0; 
    } 

    @Override 
    public View getView(int arg0, View arg1, ViewGroup arg2) { 
     ImageButton btnAction; 

     LayoutInflater inf=getLayoutInflater(); 
     View v=inf.inflate(R.layout.iconrow, arg2,false); 
     ImageView ivStatus=(ImageView)v.findViewById(R.id.icon); 
     TextView tv=(TextView)v.findViewById(R.id.text); 
     btnAction = (ImageButton)v.findViewById(R.id.btnAction); 

     final String itemID = "Item ID"; 
     final String itemText = "Item Text"; 
     final String itemStage = "Item Strage"; 

     tv.setText(mItemName.get(arg0).toString()); 

     String currentStatus = mItemStatus.get(arg0).toString(); 
     if(Functions.isNullOrEmpty(mItemStatus.get(arg0).toString())){ 
      ivStatus.setImageResource(R.drawable.ico_not_verified); 
     } else if(mItemStatus.get(arg0).toString() == "99") { 
      ivStatus.setImageResource(R.drawable.ico_not_found); 
     } else { 
      ivStatus.setImageResource(R.drawable.ico_found); 
     } 


     return v; 
    } 


} 
+0

你的'loadTable()'函數被多次調用嗎? –

+0

是的,它實際上,在onresume和oncreate – TMB87

+0

嘗試在'listView.setOnItemClickListener'中放置'Toast消息'而不是'Log.e(「TOMTEST」,「Clicked」);''。 –

回答

0

您的代碼適合我。

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

       Log.v("TOMTEST", "Clicked"); 
       Toast.makeText(getApplicationContext(), "Clicked : "+position, Toast.LENGTH_LONG).show(); 

       } 
      }); 

它會顯示吐司與正確的位置也。

不知何故,它不能在日誌中打印消息。

希望它可以幫助你。

謝謝。

+0

我剛剛嘗試了吐司消息,nothings顯示 – TMB87

+0

它適用於我。我已經爲此創建了示例演示,它的功能就像一個魅力。 –

+0

我可以知道你的'ListView'是如何在你的佈局文件中聲明的嗎? –

0

如果你extends荷蘭國際集團ListActivity你應該overrideOnListItemClick方法。這是你需要的。另外,如果我可以給你一個建議,你getView的模式應該是這樣的:

if(arg1==null){ 
    LayoutInflater inflater=getLayoutInflater(); 
    arg1=inflater.inflate(R.layout.row, parent, false); 
} 

爲了避免浪費內存,因爲ListView爲你的方式,以獲取內存回收的View用法較低

+0

如果我這樣做,它說你需要實施缺失的項目,並添加誰告訴你的onitemclick回 – TMB87

+0

? – Blackbelt

+0

Eclipse是http://www.screenup.info/uploads/3958085.jpeg – TMB87