2011-05-12 38 views
8

我有三個textview使用自定義適配器的列表視圖中的一行,並單擊該行時,我想執行所選文本視圖的單擊事件。在listview的setOnItemClickListener上設置項目單擊事件Android

下面是我點擊事件的示例代碼。在第一次點擊時,聽衆被設置,只有第二次點擊纔會發生實際的點擊事件,我想在第一次點擊時發現它。可能嗎?

listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapter, View view,  int pos, long id) { 

        final Order orderBooking = (Order)adapter.getItemAtPosition(pos); 

        // SKU listener 
        final TextView tvSkuId = (TextView) view.findViewById(orderBooking.getSelectedSkuId()); 
        tvSkuId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onSkuClickListener(view, orderBooking); 
         } 
        }); 

        // SO listener 
        final TextView tvSoId = (TextView) view.findViewById(orderBooking.getSelectedSoId()); 
        tvSoId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onSoClickListener(view, orderBooking); 
         } 
        }); 

        // OR listener 
        final TextView txtOrId = (TextView) view.findViewById(orderBooking.getSelectedOrId()); 
        //onOrClickListener(view, orderBooking); 
        txtOrId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onOrClickListener(view, orderBooking); 
         } 
        }); 
      } 
     }); 

回答

6

爲什麼不在初始化時設置這些clickListeners?當您將數據綁定到視圖時,您應該在適配器中製作它。你的代碼是錯誤的,因爲它會在用戶每次點擊列表的行時初始化你的視圖。

+1

是的,你是對的,我這樣做,因爲我創建我的適配器在一個單獨的類,並且無法更新活動視圖,現在我添加適配器作爲子類,它如果我將偵聽器設置在適配器本身中,則完美工作。非常感謝。 – Swarna 2011-05-12 10:24:54

+0

不客氣,很高興我的回答對你有幫助。 – Egor 2011-05-12 11:12:39

0

在getview方法中的adapater中執行此操作。爲每個文本視圖設置一個onclick列表器。

@Override 
public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 

    List<SectionObj> article = (List<SectionObj>) children.get(groupPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.listchildlayout_galleryview, null); 
    }  
    Gallery gallery = (Gallery) convertView.findViewById(R.id.customviewgallery); 
    gallery.setAdapter(new AddImgAdp(context, article, groupPosition)); 
    gallery.setOnItemClickListener(mOnGalleryClick); 

    return convertView; 
} 

private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 


    }  
}; 

以上是圖庫視圖。做同樣的事情,除了做它的文本視圖

+0

嗨哈迪斯你是正確的..如果我們寫listview.setOnItemClickListener中的textview clicklistener第一個列表項獲得可點擊後TextView ..如果我們寫在適配器..直接到perticular Textview ..謝謝。 – SBK 2011-05-12 10:15:04

+0

我把它添加到getView方法中,現在它工作的很好,現在我將適配器添加爲子類。 – Swarna 2011-05-12 10:27:25

+0

@Swarna加入適配器作爲子類什麼?如果需要刷新活動或片段列表視圖,則可以在基本適配器 上調用notifyDataSetChanged()方法,通知附屬的觀察者基礎數據已更改,並且任何反映數據集的視圖都應刷新自己。 – Arvis 2014-02-10 12:34:46

相關問題