2012-05-03 40 views
2

點擊自定義ListView中的項目時遇到問題,該項目在每行中包含ToggleButton,Button,TextViewSpinner。問題:當我單獨點擊每個視圖時,我怎麼能這樣做,爲每個視圖調用不同的操作?我的代碼:如何在ListView中使用BaseAdapter時單獨單擊每個項目?

public class CustomListAdapter extends BaseAdapter { 

      Context _context; 
      private ArrayList<String> _list; 

      public CustomListAdapter(Context context, 
             ArrayList<String> listItems) { 
       _context= context; 
       _list = listItems; 
      } 

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

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

      public Object getItem(int position){ 
       return _list.get(position); 
      } 



      public View getView(int position,View convertView,ViewGroup parent) 
      { 
       ViewContainer container = new ViewContainer();  

       if(convertView == null) 
       { 
        LayoutInflater inflater = LayoutInflater.from(_context); 
        convertView = inflater.inflate(R.layout.elements,parent, false); 
        convertView.setTag(container); 
        convertView.setClickable(true); 

        container.listIcon = (ToggleButton)convertView.findViewById(R.id.togle_item); 
        container.listText = (TextView)convertView.findViewById(R.id.text_listitem); 
        container.spinner=(Spinner)convertView.findViewById(R.id.spinner1); 
        container.but=(Button)convertView.findViewById(R.id.button1); 
        convertView.setOnClickListener(new OnClickListener() { 

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

         **How can I do that when I click each view individually, different action is called for each view???** 
         } 

        public void onClick(View v) { 

        } 

        } 
       ); 
       } 
       container = (ViewContainer) convertView.getTag(); 
       ToggleButton myListIcon = container.listIcon; 
       myListIcon.setChecked(true); 
       Button MyButton=container.but; 
       TextView myListText = container.listText; 
       myListText.setText(_list.get(position)); 
       Spinner MySpinner=container.spinner; 
       MySpinner.setAdapter(adapter); 
       container = null; 
       return convertView; 
       } 
       private class ViewContainer 
       { 
        private ToggleButton listIcon; 
        private TextView listText; 
        private Spinner spinner; 
        private Button but; 
       } 

     } 
+0

你是說同一個按鈕在不同的行上會做不同的事情嗎?這似乎是一個相當奇怪的情況,我認爲這會讓用戶感到困惑。 – Gophermofur

回答

0

而不是添加OnClickListenerconvertView從你需要有不同的操作行添加監聽器,每View

//... 
container.listIcon.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     //action for the toggle Button 
    } 
}); 
container.but.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     //action for the simple Button 
    } 
}); 
container.spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, 
     View view, int pos, long id) { 
     //something was selected on the spinner 
    } 

    public void onNothingSelected(AdapterView parent) { 
     // for interface 
    } 
}); 
//... 
+0

幫助:)除spinner.setOnItemClickListener之外的所有工作。程序拋出錯誤...我怎樣才能選擇一個項目在微調和告訴他們是??? – user1373101

+0

@ user1373101對不起,我使用了錯誤的監聽器。看到我編輯的答案。在'onItemSelected'方法中,你得到被點擊的元素的位置(如果你點擊第一行'position'參數將是0,如果你點擊第二行'position'參數將是1等)。 – Luksprog

+0

它的工作!謝謝 – user1373101

0

您需要修改getView像我顯示下面的代碼。

@Override 
     public View getView(int position, View convertView, ViewGroup arg2) { 
      ViewContainer container; 

      if(convertView == null) 
       { 
        LayoutInflater inflater = LayoutInflater.from(_context); 
        convertView = inflater.inflate(R.layout.elements,parent, false); 
        container = new ViewContainer(); 
        //convertView.setClickable(true); 
        container.listIcon = (ToggleButton)convertView.findViewById(R.id.togle_item); 
        container.listText = (TextView)convertView.findViewById(R.id.text_listitem); 
        container.spinner=(Spinner)convertView.findViewById(R.id.spinner1); 
        container.but=(Button)convertView.findViewById(R.id.button1); 
        convertView.setTag(container); 
       }else{ 
        container=convertView.getTag(); 
       } 
      //Now for set Click event for your Induavidual item in list you can do like below 
      //use postion to set id of each item 
      container.but.setId(position); 
      container.but.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
           //This will give you position of item 
          int id=v.getId(); 

       } 
      }); 

     //same you can do for spinner and textview and ToggleButton ,use appropriate method that you want to use 

      return convertView; 
     } 
2

我假設,你有按鈕,textview和..上的ListView。你需要爲listview上的按鈕編寫動作。

這是編碼格式:

 ..... 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view; 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.calllog_row, null); 
      button1 = (Button) view.findViewById(R.id.button1); 
      button1.setOnClickListener(this); 
     } 
     else { 
      view = convertView; 
     } 

     Button1 = (Button) view.findViewById(R.id.Button1); 
     Button1.setTag(position); // this is important 


     return view; 
    } 
    public void onClick(View v) { 
     Integer position = (Integer) v.getTag(); 
     switch (v.getId()) { 
     case R.id.button1: 
      Log.e("click position ", "" + position); 
      break; 

    } 

...... 

,如果我的假設是萊特我的編碼將會對您有所幫助。

+0

相當不錯的答案,非常感謝分享知識。 –

0
vh.orderButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // ---Starting new intent 
      Intent in = new Intent(activity.getApplicationContext(), ActivityOrder.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ; 
      // ---sending product no to next activity 
      in.putExtra("product_category", productNo); 
      in.putExtra("business_id", businessId); 
      // ---starting new activity and expecting some response back 
      activity.getApplicationContext().startActivity(in); 

      Toast.makeText(activity, productNo + " " + businessId, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
相關問題