2010-08-03 31 views
0

我在ListView中創建圖像的延遲加載。 我跟着從this source教程,我發現在Stack Overflow 它運行成功。OnItemClickListener問題

但是,當我將代碼與我的項目一起加入時,則會遇到問題。該程序沒有執行OnItemClickListener :(

我的項目有TabHost,它有5頁選項卡的內容2條的內容是使用ListActivity和完美運行

這裏是我的編碼,Main.java:。

public class ProductListing extends Activity { 
ListView list; 
MyListAdapter adapter; 
Controller c; 
ImageLoader imageLoader; 
TextView select; 

//========== JSON =========== 
ArrayList<String> strName = new ArrayList<String>(); 
ArrayList<String> strImage = new ArrayList<String>(); 
ArrayList<String> strDesc = new ArrayList<String>(); 
ArrayList<String> strSize = new ArrayList<String>(); 
JSONObject jsonObject; 
String[] listItem; 
Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      LoadJSON(); 
      setContentView(R.layout.productlisting_tab); 
      list=(ListView)findViewById(R.id.ListView01); 
      c = new Controller(this); 
      adapter=new MyListAdapter(this,this, strName, strImage,strDesc,strSize); 
      list.setAdapter(adapter); 
      list.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     // TODO Auto-generated method stub 
     System.out.println("Item Clicked"); 
    } 
     }); 


    } 

    public void LoadJSON(){ 
     try { 
      InputStream is = this.getResources().openRawResource(R.raw.premium); 
      byte[] buffer; 
      buffer = new byte[is.available()]; 
      while(is.read(buffer) != -1); 
      String jsonText = new String(buffer); 

      jsonObject = new JSONObject(jsonText); 
      JSONObject premium_tab = jsonObject.getJSONObject("premium_tab");    

      int totalItem = premium_tab.getInt(".total"); 
      for (int i = 1; i <= totalItem; i++) { 
       JSONObject premium = premium_tab.getJSONObject("premium_"+i); 
       String tempName =premium.getString(".name").toString(); 
       String tempImg = premium.getString(".image").toString(); 
       String tempDesc = premium.getString(".desc").toString(); 
       String tempSize = premium.getString(".size").toString(); 
       strName.add(tempName); 
       strImage.add(tempImg); 
       strDesc.add(tempDesc); 
       strSize.add(tempSize); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    } 

MyListAdapter.java:

public MyListAdapter(Context b,Activity a, ArrayList<String> strName, ArrayList<String> strImage, 
      ArrayList<String> strDesc, ArrayList<String> strSize) { 
    activity = a; 
    name = strName; 
    image = strImage; 
    desc = strDesc; 
    size = strSize;   
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 

public int getCount() { 
    return image.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

public static class ViewHolder{ 
    public TextView ProductName,ProductSize, ProductDesc; 
    public ImageView ProductIcon; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.productlisting, null); 
     holder=new ViewHolder(); 
     holder.ProductName=(TextView)vi.findViewById(R.id.text); 
     holder.ProductIcon=(ImageView)vi.findViewById(R.id.image); 
     holder.ProductDesc=(TextView)vi.findViewById(R.id.textdesc); 
     holder.ProductSize=(TextView)vi.findViewById(R.id.textsize); 
     vi.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)vi.getTag(); 

    holder.ProductName.setText(name.get(position)); 
    holder.ProductDesc.setText(desc.get(position)); 
    holder.ProductIcon.setTag(image.get(position)); 
    holder.ProductSize.setText(size.get(position)); 
    imageLoader.DisplayImage(image.get(position), activity, holder.ProductIcon); 
    return vi; 
    }  
} 

另一類名ImageLoader.java請參閱上面的源鏈路 我可以知道我的錯誤在哪裏嗎?我明白我的代碼會非常難看,我是一個新的機器人,請幫我解決問題。它卡住了我幾天。 你的回覆非常感謝!

P/S:我很抱歉我的英文不好,希望你們明白我在說什麼。 謝謝。

方面 Wynix

+0

你能解釋一下你的「itemClick不起作用」嗎? logcat中有錯誤嗎?您是否嘗試通過定期添加日誌來查找它不工作的位置? – Sephy 2010-08-03 08:38:48

+0

你不覺得你的適配器看起來有點奇怪嗎?它甚至沒有從Android框架擴展Adapter類... – Sephy 2010-08-03 08:41:57

+0

嗨Sephy謝謝你的回覆,我沒有在logcat中的錯誤,我已經嘗試在OnItemClickListener中放入「System.out.println(」Item Click!「)」 ()函數。但logcat沒有打印出任何單詞。關於適配器,它是擴展BaseAdapter,我很抱歉想念複製幾行.. – WynixToo 2010-08-04 01:42:06

回答

0

我已經解決了問題並解決了它。錯誤是在xml文件上。在ListView中不應該有

android:focusable="true"; menthod。

無論如何謝謝你試圖解決我的問題。 再次感謝。 乾杯!

注意Wynix

0

我使用不同的技術將事件偵聽器。在OnCreate法我寫btnAdd.setOnClickListener(onAdd);並增加一個獨立的方法掛鉤到像這樣的事件:

private View.OnClickListener onAdd=new View.OnClickListener() { 
    public void onClick(View v) { 
     // your code here 
    } 
}; 

這使得它更容易搜索代碼中的錯誤。

從您的代碼中,您將事件偵聽器設置爲整個列表,而不是每個單獨的項目。也許你應該嘗試添加事件到個別項目呢?

+0

嗨BennySkogberg,謝謝你的回覆。對不起,我仍然在Android新。我不明白你的意思是將事件添加到單個項目。你的意思是我應該添加事件到列表視圖中的所有項目?我很抱歉我的英文不好,希望你明白我在說什麼。謝謝 – WynixToo 2010-08-04 02:07:20

+0

沒有必要爲你的英語道歉,我完全理解你:)你已經正確地理解了我 - 每個項目都需要被連接到一個單獨的事件處理程序。當你第一個按你喜歡的方式工作時,很容易讓其餘的項目工作。 – 2010-08-04 06:08:10

+0

再次感謝您的回覆。但我創建列表樣式的項目。如何將事件添加到每個項目?那些項目是ArrayList 類型。 「list.setadapter(新的ArrayList (這一點,R.layout.productlisting,strName.get(1));」? 不是辦法增加該事件的項目,或者有其他的方式 我的一些例子會更容易理解,謝謝 – WynixToo 2010-08-04 08:26:03