使用SimpleCursorAdapter将ListActivity连接到DB不能正常工作的行中各个元素的OnclickListener

时间:2011-08-11 22:46:45

标签: android listactivity simplecursoradapter

请帮忙。

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

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

提前致谢,

所以我在

中尝试了以下代码
    @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
        }
    });
}

2 个答案:

答案 0 :(得分:1)

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

你这样做的方式似乎非常错误,如果你在正确的地方正确实现各种onClick监听器,你甚至可能不需要你的onListItemClick方法。

答案 1 :(得分:1)

在此处使用基于xml的列表项布局是关键。使用两个属性android:clickable="true"android:onClick="<your click handler>"设置每个可单独点击的视图,该方法需要使用此签名实现:public void <your click handler> (View v) {...}在您的活动中。需要注意的是,您必须做出设计决策来实现点击处理程序以重叠处理(对于多个View单击一个hanlder)或每个View的单个视图处理程序,前者最适合点击时基本相似在功能上,后者在它们不同时。

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

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

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

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