1

请帮忙。

正如我在标题中所说,我试图让列表适配器的一行中的各个元素根据用户单击的内容启动不同的操作。

它“有点”有效,但它需要很长时间才能对用户点击做出反应。我做错了什么?

提前致谢,

所以我尝试了以下代码

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    // Get the item that was clicked
    Cursor c = (Cursor) this.getListAdapter().getItem(position);

    // c.moveToNext();

    prescription_id = c.getString(0);
    TextView pName = (TextView) v.findViewById(R.id.text2);
    TextView paName = (TextView) v.findViewById(R.id.text3);
    TextView rDateLabel = (TextView) v.findViewById(R.id.textView1);
    TextView rDate = (TextView) v.findViewById(R.id.text4);
    TextView rLeftLabel = (TextView) v.findViewById(R.id.text5);
    TextView rLeft = (TextView) v.findViewById(R.id.text6);
    ImageView callPhone = (ImageView) v.findViewById(R.id.Call_Pharmacy);

    pName.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    pa.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rDateLabel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rDate.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rLeftLabel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rLeft.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    callPhone.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //Some Code
        }
    });
}
4

2 回答 2

1

所有这些 onClick 侦听器(一个 ListView 元素的单个子视图上的那些)可能不应该在 onListItemClick 方法中,而是在适配器的 getView 方法中(正确使用 convertView 参数)。

您这样做的方式似乎很错误,如果您在正确的位置正确实现了各种 onClick 侦听器,甚至可能不需要您的 onListItemClick 方法。

于 2011-08-11T23:24:10.943 回答
1

为您的列表项使用基于 xml 的布局是这里的关键。使用两个属性设置每个可单独单击的视图,android:clickable="true"并且android:onClick="<your click handler>"需要使用此签名实现该方法:public void <your click handler> (View v) {...}在您的 Activity. 附带说明的是,您必须做出设计决定以实现单击处理程序以重叠处理(一个单击处理程序用于多个视图)或每个视图的单个视图处理程序,前者最适合单击基本相似的情况在功能上,后者是当它们不同的时候。

下一步是实现点击处理程序,这里的关键是使用ListView.getPositionForView(View v)以便您可以关联行、数据和点击的视图。

不要忘记将ListActivity.onListItemClick()实现为单击列表项的根布局的全部内容,以及没有自己的onClick处理程序集的视图的全部内容。

上述技术将具有良好的性能,并利用多个 Android API 来加速您的开发。

如果您决定在代码中实现侦听器,请getView()仔细研究(如 darma 所述)并为了性能(如果您的列表中有多个项目)重用点击侦听器以及上面关于如何关联数据和行的讨论.

于 2011-08-12T22:51:00.900 回答