繁体   English   中英

如何在ListView项上为click事件设置侦听器

[英]How can I set a listener for a click event on a ListView item

我为ListView项目单击事件编写了以下代码,但是当我运行该应用程序并单击该项目时,没有任何动作。 为什么会这样呢?

    public class ListingActivity extends Activity implements OnClickListener{
    private ListView list;
    private Button sortBtn,filter;
    double destLat,destLng;
    AlertDialog alert;
    MyAdabpter adapter;

    ArrayList<HashMap<String,String>> filteredList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listviewer);
        list = (ListView) findViewById(R.id.list);
        sortBtn = (Button) findViewById(R.id.sort_btn);
        filter = (Button) findViewById(R.id.filter_btn);
    //      ListAdapter adapter = new SimpleAdapter(this, FetchXMLData.mylist , R.layout.list_item, 
    //              new String[] { "Name", "Vicinity","Distance","Rating"}, 
    //              new int[] { R.id.name, R.id.address,R.id.distance,R.id.rating });
        adapter = new MyAdabpter(this);

        list.setAdapter(adapter);
        list.setTextFilterEnabled(true);
        list.setEnabled(true);
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                // TODO Auto-generated method stub
                destLat = Double.parseDouble(FetchXMLData.mylist.get(position).get("Latitude"));
                destLng = Double.parseDouble( FetchXMLData.mylist.get(position).get("Longitude"));
                Intent intent = new Intent(Intent.ACTION_VIEW, 
                        Uri.parse("http://maps.google.com/maps?saddr=" + LocationSearch.latitude + "," + LocationSearch.longitude + 
                                "&daddr=" + destLat + "," + destLng));
                    intent.setComponent(new ComponentName("com.google.android.apps.maps", 
                        "com.google.android.maps.MapsActivity"));
                    startActivity(intent);

            }
        });

        sortBtn.setOnClickListener(this);
        filter.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.sort_btn:
            showSortList();
            break;

        case R.id.filter_btn:
            showFilterList();
            break;
        default:
            break;
        }

    }
    protected void showSortList() {
        // TODO Auto-generated method stub
        final CharSequence[] items = {"Rating", "Distance"};
        AlertDialog.Builder builder = new AlertDialog.Builder(ListingActivity.this);
        builder.setTitle("Sort by");
        FetchXMLData.mylist = FetchXMLData.templist;
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Collections.sort(FetchXMLData.mylist,Collections.reverseOrder(new MyComparator(items[item].toString())));
                dialog.dismiss();
                adapter.notifyDataSetChanged();
            }
        });
        alert = builder.create();
        alert.show();
    }
    protected void showFilterByRating() {
        // TODO Auto-generated method stub
        final CharSequence[] items = {"only 5 stars", "only 4 stars","only 3 stars", "only 2 stars","only 1 star"};

        AlertDialog.Builder builder = new AlertDialog.Builder(ListingActivity.this);
        builder.setTitle("Filter by Rating");
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                dialog.dismiss();
                FetchXMLData.mylist = FetchXMLData.templist;
                filteredList = new ArrayList<HashMap<String,String>>();
                if(item == 0 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(!FetchXMLData.mylist.get(i).get("Rating").equals(""))
                        {
                            if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Rating").toString()) == 5)
                            {
                                filteredList.add(FetchXMLData.mylist.get(i));
                            }
                        }
                    }
                    FetchXMLData.mylist = filteredList;
                    adapter.notifyDataSetChanged();
                }
                else if(item == 1 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(!FetchXMLData.mylist.get(i).get("Rating").equals(""))
                        {
                            if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Rating")) == 4.0 )
                            {
                                filteredList.add(FetchXMLData.mylist.get(i));
                            }
                        }
                    }
                    FetchXMLData.mylist = filteredList;
                    adapter.notifyDataSetChanged();
                }
                else if(item == 2 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(!FetchXMLData.mylist.get(i).get("Rating").equals(""))
                        {
                            if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Rating")) == 3.0 )
                            {
                                filteredList.add(FetchXMLData.mylist.get(i));
                            }
                        }
                    }

                }
                else if(item == 3 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(!FetchXMLData.mylist.get(i).get("Rating").equals(""))
                        {
                            if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Rating")) == 2.0 )
                            {
                                filteredList.add(FetchXMLData.mylist.get(i));
                            }
                        }
                    }

                }
                else if(item == 4 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(!FetchXMLData.mylist.get(i).get("Rating").equals(""))
                        {
                            if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Rating")) == 1.0 )
                            {
                                filteredList.add(FetchXMLData.mylist.get(i));
                            }
                        }
                    }

                }
                if(filteredList.size() > 0)
                {
                    FetchXMLData.mylist = filteredList;
                    adapter.notifyDataSetChanged();
                }
                else
                {
                    Toast.makeText(getApplicationContext(),"Sorry,no data found", Toast.LENGTH_SHORT).show();
                }
            }
        });
        alert = builder.create();
        alert.show();
    }
    protected void showFilterList() {
        // TODO Auto-generated method stub
        final CharSequence[] items = {"By Rating", "By Distance", "By Name"};

        AlertDialog.Builder builder = new AlertDialog.Builder(ListingActivity.this);
        builder.setTitle("Filter by");
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                dialog.dismiss();
                FetchXMLData.mylist = FetchXMLData.templist;
                if(items[item].equals("By Rating"))
                {
                    showFilterByRating();
                }
                else if(items[item].equals("By Distance"))
                {
                    showFilterByDistance();
                }
                else if(items[item].equals("By Name"))
                {
                    //showFilterByName();
                }

            }
        });
        alert = builder.create();
        alert.show();
    }
    protected void showFilterByDistance() {
        // TODO Auto-generated method stub
        final CharSequence[] items = {"between 0-2km", "between 2-4km","between 4-5km"};

        AlertDialog.Builder builder = new AlertDialog.Builder(ListingActivity.this);
        builder.setTitle("Filter by Distance");
        FetchXMLData.mylist = FetchXMLData.templist;
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                dialog.dismiss();
                filteredList = new ArrayList<HashMap<String,String>>();
                if(item == 0 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Distance")) > 0 && Float.parseFloat(FetchXMLData.mylist.get(i).get("Distance")) <= 2  )
                        {
                            filteredList.add(FetchXMLData.mylist.get(i));
                        }
                    }

                }
                else if(item == 1 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Distance")) > 2 && Float.parseFloat(FetchXMLData.mylist.get(i).get("Distance")) <= 4 )
                        {
                            filteredList.add(FetchXMLData.mylist.get(i));
                        }
                    }

                }
                else if(item == 2 && FetchXMLData.mylist.size() > 0)
                {
                    for(int i = 0; i < FetchXMLData.mylist.size(); i++)
                    {
                        if(Float.parseFloat(FetchXMLData.mylist.get(i).get("Distance")) > 4 && Float.parseFloat(FetchXMLData.mylist.get(i).get("Distance")) <=5  )
                        {
                            filteredList.add(FetchXMLData.mylist.get(i));
                        }
                    }

                }
                if(filteredList.size() > 0)
                {
                    FetchXMLData.mylist = filteredList;
                    adapter.notifyDataSetChanged();
                }
                else
                {
                    Toast.makeText(getApplicationContext(),"Sorry,no data found", Toast.LENGTH_SHORT).show();
                }
            }
        });
        alert = builder.create();
        alert.show();
    }
    protected void showFilterByName() {
        // TODO Auto-generated method stub
        final CharSequence[] items = {"between 0-2km", "between 2-4km","between 4-5km"};
        FetchXMLData.mylist = FetchXMLData.templist;
        AlertDialog.Builder builder = new AlertDialog.Builder(ListingActivity.this);
        builder.setTitle("Enter key word");
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });
        alert = builder.create();
        alert.show();
    }




}

以下是我的带有ListView布局文件:

<?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="fill_parent"
android:background="#000000"
android:orientation="vertical" >

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:dividerHeight="5dp" >
</ListView>

<RelativeLayout
    android:id="@+id/footer_menu"
    style="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom"
    android:orientation="vertical" >

    <Button
        android:id="@+id/sort_btn"
        android:layout_width="160dp"
        android:layout_height="fill_parent"
        android:background="@drawable/footer_button"
        android:text="Sort"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />

    <Button
        android:id="@+id/filter_btn"
        android:layout_width="160dp"
        android:layout_height="fill_parent"
        android:layout_toRightOf="@+id/sort_btn"
        android:background="@drawable/footer_button"
        android:text="Filter"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />
</RelativeLayout>

</RelativeLayout>
 listView.setOnItemClickListener(new OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> parent, View view, int position,
               long id) {

           String item = values[position];

           Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();

       }
   });

您想做这样的事情:

public class YourActivity extends ListActivity implements OnItemClickListener{

    @Override
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        setContentView(R.layout.your_layout);
        getListView().setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // Do your thing here
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM