2011-01-27 45 views
1

下面是我的listactivity的代碼任何人都可以告訴我如何獲得項目點擊事件?listactivity不響應onlistitemclick事件?

public class MyCustomListView extends ListActivity 
{ 
    private ArrayList<String> m_orders=null; 
    private ArrayList<String> artistsList=new ArrayList<String>(); 
    private OrderAdapter m_adapter; 
    String[] array; 
    String[] artists; 
    ListView listView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 


     Intent intent=getIntent(); 
     array=intent.getStringArrayExtra("trackname"); 
     artists=intent.getStringArrayExtra("artists"); 
     m_orders = new ArrayList<String>(); 
     for(int i=0;i<array.length;i++) 
     { 
      m_orders.add(array[i]); 
      artistsList.add(artists[i]); 
     } 
     this.m_adapter = new OrderAdapter(this, R.layout.row, m_orders); 
       setListAdapter(this.m_adapter); 
    } 
    private class OrderAdapter extends BaseAdapter 
    { 
     private ArrayList<String> items; 
     public OrderAdapter(Context context,int id,ArrayList<String> items) 
     { 
      super(); 
      this.items=items; 
     } 

     public View getView(int position,View convertView,ViewGroup parent) 
     { 
      View view=convertView; 
      if(view==null) 
      { 
       LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view=inflater.inflate(R.layout.row,parent,false); 
      } 
      String string=items.get(position); 
      if(string!=null) 
      { 
       TextView t1=(TextView)view.findViewById(R.id.toptext); 
       TextView t2=(TextView)view.findViewById(R.id.bottomtext); 
       if(t1!=null) 
       { 
        t1.setText(items.get(position)); 
       } 
       if(t2!=null) 
       { 
        String artistName=artistsList.get(position); 
        if(artistName.equals("")) 
        { 
         t2.setText("UnKnown"); 
        } 
        else 
        { 
         t2.setText(artistName); 
        } 

       } 
      } 
      return view; 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return array.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 
    } 
    @Override 
    public void onListItemClick(ListView arg0, View arg1, int arg2, long arg3) { 
      Log.i("Position",""+arg2);   
    } 

這段代碼有什麼問題?

回答

0

下面的代碼解決了我的問題\;

private class OrderAdapter extends BaseAdapter implements OnClickListener 
    { 
     private ArrayList<String> items; 
     public OrderAdapter(Context context,int id,ArrayList<String> items) 
     { 
      super(); 
      this.items=items; 
     } 

     public View getView(int position,View convertView,ViewGroup parent) 
     { 
      View view=convertView; 
      if(view==null) 
      { 
       LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view=inflater.inflate(R.layout.row,parent,false); 
      } 
      String string=items.get(position); 
      if(string!=null) 
      { 
       TextView t1=(TextView)view.findViewById(R.id.toptext); 
       TextView t2=(TextView)view.findViewById(R.id.bottomtext); 
       if(t1!=null) 
       { 
        t1.setText(items.get(position)); 
       } 
       if(t2!=null) 
       { 
        String artistName=artistsList.get(position); 
        if(artistName.equals("")) 
        { 
         t2.setText("UnKnown"); 
        } 
        else 
        { 
         t2.setText(artistName); 
        } 

       } 
       view.setOnClickListener(new OnItemClickListener(position)); 
      } 
      return view; 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return array.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 
     public void onClick(View v) 
     { 
      Log.i("@@@@@@@@@@@@@@","buttonClicked"); 
     } 
     } 
    private class OnItemClickListener implements OnClickListener 
    {      
     private int mPosition;   
     OnItemClickListener(int position) 
     {     mPosition = position;   }  
     @Override   
     public void onClick(View arg0) 
     {     
      Log.v("****************", "onItemClick at position" + mPosition);        } 
    } 
0

在你的初始代碼段,你忘記了OnItemClickListener設置 - 在回答自己,你與view.setOnClickListener(new OnItemClickListener(position));

如果我理解正確設置它,你創建和設置它在每個小區 - 在ListView本身的級別上執行它可能更有意義,並且只能執行一次。對於性能和內存消耗來說,這應該會更好(每次創建一個新實例時,將會有new OnItemClickListenr())。

相關問題