2012-11-06 92 views
2

我有一個自定義列表視圖適配器,其中包含兩個按鈕,問題是很難點擊按鈕並且它一直失去焦點,或者在識別之前必須多次觸摸它點擊。Android:在列表視圖項中按下按鈕

@Override 
public View getView(int position, View view, final ViewGroup parent) { 

    DataEntity data = entityList.get(position); 

    view = inflater.inflate(R.layout.new_mission_row, parent, false); 

// inflate other views 


    Button playButton = (Button) view.findViewById(R.id.buttonPlay); 
    playButton.setBackgroundResource(R.drawable.blue_button); 
    playButton.setTextColor(Color.WHITE); 
    MyClickListener listener = new MyClickListener(context,entity); 
    playButton.setOnClickListener(listener); 
    playButton = (Button) view.findViewById(R.id.buttonMap); 
    playButton.setBackgroundResource(R.drawable.blue_button); 
    playButton.setTextColor(Color.WHITE); 
    playButton.setOnClickListener(listener); 
    return view; 
} 
+0

它應該識別點擊,點擊響應是基於您在onClick()方法中所做的。如果你正在加載大量的東西,那麼你會覺得點擊事件已經太遲了。否則你的背景源可能很小,沒有完全覆蓋按鈕表面... –

+0

它甚至沒有改變按下的狀態drawable,這就是爲什麼我排除了我的點擊聽衆從方程 –

回答

1

請檢查您的代碼一次。您尚未爲buttonmap創建不同的按鈕對象。

playButton = (Button) view.findViewById(R.id.buttonMap); 

在這裏,您使用的是相同的按鈕對象您爲buttonPlay

也造就當你被填充ListView控件,那麼你應該使用ViewHolder pattern有效地填充ListView。

+0

是的,它似乎就像我的行中包含的視圖,其中insync,ViewHolder模式修復了它,再次感謝 –

1

看下面的一個。

@Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 

     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      imageLoader = new SISIImageLoader(MY_ACTIVITY.this); 
      v = vi.inflate(R.layout.game_display_row, null); 
      ViewHolder holder = new ViewHolder(); 

      holder.deleteGameBtn = (Button) v.findViewById(R.id.deleteGameBtn); 


      v.setTag(holder); 
     } 

     final Gamedata o = items.get(position); 

     ViewHolder holder = (ViewHolder) v.getTag(); 


     if (o != null) { 

      Button deleteGameBtn = (Button) v.findViewById(R.id.deleteGameBtn); 

      holder.deleteGameBtn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

         // do what you want to do on click 

        } 


      }); 

     } 
     return v; 
    } 

希望它能解決您的問題。

+0

謝謝你真的幫助 –