Listview不会触发onItemClickListener事件

时间:2011-03-21 06:17:56

标签: android android-layout

我想在我的listview上放置onItemClick监听器...但是当我点击listview时什么也没发生.. 这是我的代码......任何人都可以建议我怎么做这个.. ??

这是我的XML文件(list.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="@drawable/listbg">

<!-- For the Header Part -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="fill_parent"
    android:layout_height="35dip"
    android:background="#EE7621">

    <Button
        android:id="@+id/menuButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/backhome"
        >
    </Button>

    <TextView 
        android:text="Pantries"
        android:layout_height="wrap_content"
        android:layout_width="210dip"
        android:gravity="center"
        android:shadowColor="#3B3B3B"
        android:textColor="#FFFFFF"
        android:textSize="20dip"
        android:textStyle="bold">

    </TextView> 
        <Button
        android:id="@+id/allonmap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:background="@drawable/allonmap"
        >
    </Button>


</LinearLayout>

<!-- For the List View -->
<TextView android:text="Total Pantries"
         android:id="@+id/totalPantries"
         android:gravity="center" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content"
         android:textColor="#F2F2F2"
         android:background="#B3B3B3">
</TextView>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">

<ListView 
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>


<!-- For the Footer Part -->
    <RelativeLayout

        android:orientation="vertical" 
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:layout_centerHorizontal="true"
        android:gravity="bottom">

        <ImageView
            android:id="@+id/footerview"
            android:src="@drawable/footer"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_gravity="center">
        </ImageView>

    </RelativeLayout>


</RelativeLayout>

</LinearLayout>   

这是我的Row.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>

<RelativeLayout
    android:id="@+id/mainContent"
    android:orientation="vertical"
    android:layout_width="300dip"
    android:layout_height="fill_parent">

    <TextView
        android:id="@+id/pantryName"
        android:layout_marginTop="8dip"
        android:layout_marginLeft="10dip"
        android:text="name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:textSize="16dip"
        android:textColor="#00AF33" 
        android:gravity="center_vertical"
    />

    <TextView
        android:layout_below="@id/pantryName"
        android:textColor="#242424"
        android:text="address1"
         android:layout_marginTop="8dip"

        android:layout_marginLeft="10dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/pantryAddress1"

    />
    <TextView
        android:layout_below="@id/pantryAddress1"
        android:textColor="#242424"
        android:text="address2"
        android:layout_marginLeft="10dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/pantryAddress2"

    />


      <Button android:layout_below="@+id/pantryAddress2" 
            android:layout_width="wrap_content" 
            android:id="@+id/phbtn" 
             android:layout_marginLeft="10dip"
            android:layout_height="wrap_content"
            android:background="@drawable/phonecall"
            ></Button>

     <TextView
        android:layout_toRightOf="@id/phbtn"
        android:layout_width="fill_parent"
        android:layout_below="@id/pantryAddress2"
        android:textColor="#242424"
         android:layout_marginLeft="10dip"
        android:layout_height="wrap_content"
        android:id="@+id/pantryPhno"

    />
     <TextView
        android:layout_below="@id/pantryPhno"
        android:textColor="#242424"
        android:textSize="10dip"
        android:layout_marginLeft="12dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/distTime"

    />

</RelativeLayout>
<Button android:layout_width="wrap_content" 
            android:background="@drawable/next"
            android:layout_marginTop="45dip"
            android:layout_marginRight="7dip"
            android:layout_alignParentRight="true"
            android:id="@+id/nextBtn" 
            android:layout_height="wrap_content" 
            ></Button>
</RelativeLayout>

这是我的java文件......

package com.pantylocator;

import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


public class PantriesListActivity extends ListActivity 
{
PantreisInfo parsedPantry;
ImageAdapter m_adapter;
TextView totalPantries;
public Button allOnMap,pantrySelection;

 public static ArrayList<PantreisInfo> m_pantries=new ArrayList<PantreisInfo>();

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.m_adapter=new ImageAdapter(this, R.layout.row, m_pantries);
    setListAdapter(this.m_adapter);
    setContentView(R.layout.list);
    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    Bundle bundle = this.getIntent().getExtras();
    String parseURL = bundle.getString("url");



    lv.setOnItemClickListener(new OnItemClickListener()
    {

        public void onItemClick(AdapterView<?> parent, View view,int Position,long id)
        {
             Toast.makeText(getApplicationContext(),"Clicked",Toast.LENGTH_LONG).show();
        }
    });


    parseURL(parseURL);

    parsedPantry=PanatriesHandler.getPantries();
    PantreisInfo pantry[]=null;
    pantry =new PantreisInfo[parsedPantry.getID().size()];


    for(int i=0;i<parsedPantry.getID().size();i++)
    {
        String temp_id=parsedPantry.getID().get(i);
        String temp_name=parsedPantry.getName().get(i);
        String temp_add1=parsedPantry.getAddress1().get(i);
        String temp_add2=parsedPantry.getAddress2().get(i);
        String temp_phno=parsedPantry.getPhone().get(i);
        String temp_distTime=parsedPantry.getDistTime().get(i);
        String temp_lat=parsedPantry.getGeo_lat().get(i);
        String temp_long=parsedPantry.getGeo_long().get(i);

        pantry[i]=new PantreisInfo();
        pantry[i].setId(temp_id);
        pantry[i].setName(temp_name);
        pantry[i].setAddress1(temp_add1);
        pantry[i].setAddress2(temp_add2);
        pantry[i].setPhone(temp_phno);
        pantry[i].setDistTime(temp_distTime);
        pantry[i].setGeoLat(temp_lat);
        pantry[i].setGeoLong(temp_long);

        m_pantries.add(pantry[i]);


    }

    totalPantries=(TextView)findViewById(R.id.totalPantries);
    totalPantries.setText("Total "+parsedPantry.getID().size()+" Pantries");




    allOnMap=(Button)findViewById(R.id.allonmap);
    allOnMap.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            Toast.makeText(PantriesListActivity.this,
                "Wait..map is being loaded",Toast.LENGTH_SHORT).show();
            Intent myIntent;
            myIntent=new Intent(PantriesListActivity.this, PantriesOnMap.class);

            startActivityForResult(myIntent, 0);
            // TODO Auto-generated method stub

        }
    });


}
void parseURL(String url)
{


       try
        {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();
            URL sourceUrl = new URL(url);
            PanatriesHandler pantriesHandler=new PanatriesHandler();
            xr.setContentHandler(pantriesHandler);
            xr.parse(new InputSource(sourceUrl.openStream()));


        }
        catch(Exception e)
        {
            System.out.println("==================>Exception Raised==>"+e);
        }
}
 class ImageAdapter extends ArrayAdapter<PantreisInfo> 
    {
        private ArrayList<PantreisInfo> items;

        public ImageAdapter(Context context,
            int textViewResourceId,ArrayList<PantreisInfo> items) 
        {
            super(context, textViewResourceId, items);
            this.items = items;

        }

        public View getView(int position, View convertView, ViewGroup parent) 
        {
            View v = convertView;
            if (v == null) 
            {
                try
                {
                LayoutInflater vi = (LayoutInflater)
                    getSystemServiceContext.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);
                    }
                catch(Exception e)
                {
                    System.out.println("Excption Caught"+e);
                }
            }
            PantreisInfo p = items.get(position);
            if (p != null) 
            {
                TextView name = (TextView) v.findViewById(R.id.pantryName);
                TextView add1= (TextView) v.findViewById(R.id.pantryAddress1);
                TextView add2=(TextView)v.findViewById(R.id.pantryAddress2);
                TextView phno = (TextView) v.findViewById(R.id.pantryPhno);
                TextView distTime = (TextView) v.findViewById(R.id.distTime);


                if (name != null)
                {
                    name.setText(p.getName().get(0).toString());
                }
                if (add1 != null) 
                {
                    add1.setText(p.getAddress1().get(0).toString());
                }
                if (add2 != null) 
                {
                    add2.setText(p.getAddress2().get(0).toString());
                }
                if (phno != null) 
                {
                    phno.setText(p.getPhone().get(0).toString());
                }
                if (distTime!= null) 
                {
                    distTime.setText("Distribution Time: "+p.getDistTime().get(0).toString());
                }
            }

            return v;
        }

    }

}

提前感谢.....

4 个答案:

答案 0 :(得分:1)

您可以使用覆盖方法,而不是设置clikclistener lv.setOnItemClickListener(new OnItemClickListener() , 由ListActivity提供的protected void onListItemClick(ListView l, View v, int position, long id)

答案 1 :(得分:1)

嗨nirav获取一个onItem点击列表你必须编写我在你的代码中找不到的onclickListener试试。

答案 2 :(得分:1)

试试这个,它为我工作.. public void onItemClick(AdapterView<?> parent, View view1, int position, long id) { // The action to be taken when item is clicked }

答案 3 :(得分:0)

SimpleAdapter adapter = new SimpleAdapter(this, 
   groupData, 
   R.layout.listitem, 
   new String[] {"name" , "id"},
   new int[]{ R.id.txtItemName, R.id.txtid} );
   lv.setAdapter(adapter);
   lv.setOnItemClickListener(new OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3){
       //u get positon of list item from arg2
     }
   });