【问题标题】:how to make a click event on a textview of child of a custom listview in android如何在android中自定义列表视图的子文本视图上进行点击事件
【发布时间】:2012-09-03 07:15:54
【问题描述】:

基本上我是 Android 新手,对它了解不多。我正在制作一个测验程序,其中我使用自定义 ListView 和 5 个自定义 TextViews,一个用于问题,其他 4 个用于选项。我的问题是我希望TextView 是可点击的,而LisView 作为选择模式是单一的。也就是说,如果我单击一个文本,所有其他 TextViews 应该变得不可点击。我的问题是每当我在子布局中单击TextView 时,只有外部布局,即ListView 的项目被选中。 这是我的列表视图的屏幕截图

https://picasaweb.google.com/108429569548433380582/Android?authkey=Gv1sRgCJ3kxJz7tLvaTg#5783846428648608706

【问题讨论】:

  • 您是否在自定义视图中扩展了ListView
  • 抱歉怎么做让我检查一下,我会回来的...顺便说一句谢谢哥们看看我的列表视图就像这样picasaweb.google.com/108429569548433380582/…
  • 你问我是否扩展了适配器??对不起,我没听明白,请告诉我你问了什么

标签: android android-layout android-widget android-listview textview


【解决方案1】:

您可以通过两种方式做到这一点:

1. 像这样直接使用 onClickListener:

textView.setOnClickListener(new View.OnClickListener(
        public void onClick(View arg0) {

            // Do anything here.

        }
    });

2.XML 文件中,在<TextView /> 的声明中添加一个属性为:

android:onClick="onClickTextView"

在你的活动中,添加这个函数:

public void onClickTextView(View view) {

         // Do anything here.
}

更新:

使用以下代码获取 TextView 上的点击事件:

// Click event for single list row
        getListView().setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                TextView tv = (TextView) (findViewById(R.id.title));
                if (tv != null) {
                    tv.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            Toast.makeText(MainActivity.this, "CLICKED",
                                    Toast.LENGTH_LONG).show();
                        }
                    });
                } else {
                    Toast.makeText(MainActivity.this, "TV not found",
                            Toast.LENGTH_LONG).show();
                }
            }
        });

【讨论】:

  • 我一定会试试的,并会尽早向您报告......顺便说一句,伙计
  • 我尝试了您的建议,但我认为问题在于,当我单击文本视图时,选择了列表视图的行项而不是其子视图中的文本视图,我向您发送了屏幕截图的链接我的应用程序中的朋友看看那个伙伴,并建议我提供更多帮助 [链接](picasaweb.google.com/108429569548433380582/…)
  • 我应该使用带有自定义背景的按钮吗,会有所不同吗???回复我一些其他方法,伙计
  • 我已经更新了我的答案。请看。抱歉回复晚了。
  • 抱歉,回复迟了。请原谅我,但我改变了我使用单选按钮的整个概念。但是视图持有者解决了这个问题。
【解决方案2】:

试试这个:

当您选择一个文本视图时,其他三个将无法点击

    final TextView texta = (TextView) findViewById(R.id.text_a);
    final TextView textb = (TextView) findViewById(R.id.text_b);
    final TextView textc = (TextView) findViewById(R.id.text_c);
    final TextView textd = (TextView) findViewById(R.id.text_d);
    texta.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v) {

            textb.setClickable(false);
            textc.setClickable(false);
            textd.setClickable(false);
        }

    });
    textb.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v) {

            texta.setClickable(false);
            textc.setClickable(false);
            textd.setClickable(false);
        }

    });
    textc.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v) {

            texta.setClickable(false);
            textb.setClickable(false);
            textd.setClickable(false);
        }

    });
    textd.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v) {

            texta.setClickable(false);
            textb.setClickable(false);
            textc.setClickable(false);
        }

    });

【讨论】:

  • 首先感谢亚当的帮助,但当我点击 textviews 时我的问题仍然存在,它没有响应你更多地回答我的问题picasaweb.google.com/108429569548433380582/… 我想做的,因为每当我点击一个文本视图时,它都会被选中,它会检查所选文本视图中的文本并带有预加载的答案。但行项目一直被选中。
【解决方案3】:

假设你扩展 BaseAdapter 来设置列表视图的内容 ->

打开当前持有者位置的TextView监听器和settag,在onclick方法中执行你的操作。

【讨论】:

  • 老兄,你能在这里推荐任何例子或一些网站吗,因为我是安卓新手。
【解决方案4】:

这是 ListView 的默认行为。只有一个可以点击:列表行或行内的项目。

例如:如果行项目是 textView(如您的情况),则列表行将是可点击的,但如果行项目是按钮,则列表行将不可点击。如果您将 TextView 设置为可点击,情况也是如此。

根据您的要求,更好的方法是使用 RadioGroup(而不是多个文本视图并禁用和启用它们)。 您应该为列表项使用自定义布局,其中 TextView 用于问题,RadioGroup 用于选项。

布局可能是这样的:

点击以下链接以供参考: 对于listView
RadioGroup

我希望这会有所帮助

【讨论】:

  • 查看图片的链接后,我可以说你不需要TextView,你只需要一个圆形按钮作为选项。并且 onClick 您可以删除按钮的文本(错误选项)。如果我错了,请纠正我
  • 实际上,该选项 textview 有一些动画,我认为我应该使用简单的按钮,以便我可以将背景更改为自定义按钮,谢谢朋友的回复。如果一切都徒劳无功,我会选择你的选择,我会选择你的意见。如果你有任何想法,请继续发布
【解决方案5】:

感谢 Shrikant 和 adam 的帮助 抱歉,我很抱歉回复得太晚了。

或者像 Shrikant 那样在适配器类中使用它:

textViewa.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do anything here.
        }
    });

    textViewb.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            // Do anything here.
        }
    });

    //and so on...

    // or better to use ViewHolder holder; for these type of listviews;

    View.OnClickListener clickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            // Do what you want to do.

            // for my i have to call a method in my parent activity. so in    constructor of adapter, I passed the activity and then typecasted it like

            ParentActivity parent = (ParentActivity) activity;
            parent.chosenAnswer(view.getId());

            // then in chosenAnswer(int id) in parentActivity use a switch case for the same logic as in Adam's answer.

            // OR 
            //you can write like this too..

            switch (view.getId()) {
                case R.id.textViewa:
                    break;
                case R.id.textViewb:
                    break;
                case R.id.textViewc:
                    break;
                case R.id.textViewd:
                    break;
            }
        }
    };

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多