2013-04-30 97 views
0

我无法使listview项目可点击。我试过,如果说明,onclicklisteners和我还没有取得任何成功,有谁知道如何做到这一点?我还有另一个班级来获得字符串,但我不认为这是必要的。如果你能帮我解决这个问题,我将不胜感激! !谢谢你这里是我的代码:如何使自定义listview可点击

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity{ 

private ProgressDialog m_ProgressDialog = null; 
private ArrayList<Order> m_orders = null; 
private OrderAdapter m_adapter; 
private Runnable viewOrders; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    m_orders = new ArrayList<Order>(); 
    this.m_adapter = new OrderAdapter(this, R.layout.row, m_orders); 
    setListAdapter(this.m_adapter); 

    viewOrders = new Runnable(){ 
     @Override 
     public void run() { 
      getOrders(); 
     } 
    }; 
    Thread thread = new Thread(null, viewOrders, "MagentoBackground"); 
    thread.start(); 
    m_ProgressDialog = ProgressDialog.show(MainActivity.this,  
      "Please wait...", "Retrieving data ...", true); 
} 
private Runnable returnRes = new Runnable() { 

    @Override 
    public void run() { 
     if(m_orders != null && m_orders.size() > 0){ 
      m_adapter.notifyDataSetChanged(); 
      for(int i=0;i<m_orders.size();i++) 
      m_adapter.add(m_orders.get(i)); 
     } 
     m_ProgressDialog.dismiss(); 
     m_adapter.notifyDataSetChanged(); 
    } 
}; 
private void getOrders(){ 
     try{ 
      m_orders = new ArrayList<Order>(); 
      Order o1 = new Order(); 
      o1.setOrderName("Item 1"); 
      o1.setOrderStatus("2012"); 
      o1.setorderpic(R.drawable.bulb); 
      Order o2 = new Order(); 
      o2.setOrderName("Item 2"); 
      o2.setOrderStatus("Completed"); 
      o2.setorderpic(R.drawable.bulb); 
      m_orders.add(o1); 
      m_orders.add(o2); 
      Thread.sleep(5000); 
      Log.i("ARRAY", ""+ m_orders.size()); 
     } catch (Exception e) { 
      Log.e("BACKGROUND_PROC", e.getMessage()); 
     } 
     runOnUiThread(returnRes); 
    } 
private class OrderAdapter extends ArrayAdapter<Order> { 

    private ArrayList<Order> items; 

    public OrderAdapter(Context context, int textViewResourceId, ArrayList<Order> items) { 
      super(context, textViewResourceId, items); 
      this.items = items; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.row, null); 
      } 
      Order o = items.get(position); 
      if (o != null) { 
        TextView tt = (TextView) v.findViewById(R.id.toptext); 
        TextView bt = (TextView) v.findViewById(R.id.bottomtext); 
        ImageView ct = (ImageView) v.findViewById(R.id.icon); 
        if (tt != null) { 
          tt.setText("Name: "+o.getOrderName());       } 
        if(bt != null){ 
          bt.setText("Status: "+ o.getOrderStatus()); 
        } 
        if(ct !=null){ 
         ct.setImageResource(o.getorderpic()); 
        } 
      } 
      return v; 
    } 

}

+0

你想整个列表视图是可点击的或每个项目在列表视图? – draksia 2013-04-30 20:31:00

+0

在列表视图中的每个项目 – cw1998 2013-04-30 21:04:31

回答

2

您可以使用自定义适配器的getView)视图的OnClickListener(

v.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View v) { 

     // do something on click  
     } 

    }); 

http://developer.android.com/reference/android/view/View.OnClickListener.html

+0

这适用于我需要的功能!谢谢! – cw1998 2013-04-30 21:04:08

+0

这可能不是最好的办法,一般你会使用附加到列表视图的'OnItemClickListener'。这将在任何项目被点击时被调用。在适配器内重做一个'OnClickListener'将会很昂贵。 – draksia 2013-05-01 12:31:27

+0

@draksia随意编辑答案。如果您有更好的建议,请将编辑标题和您的建议 – Raghunandan 2013-05-01 12:33:45

2

您应该重写ListActivity的onListItemClick方法。这就是ListActivity的目的。

onListItemClick()

+0

如果您使用的是ListActivity,这是正确的方法。 – draksia 2013-05-01 12:34:38

相关问题