0

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

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

4

5 回答 5

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();
                }
            }
        });
于 2012-09-03T07:23:44.950 回答
0

假设您扩展 BaseAdapter 以设置列表视图内容 ->

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

于 2012-09-03T07:36:09.790 回答
0

试试这个 :

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

    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);
        }

    });
于 2012-09-03T07:46:50.757 回答
0

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

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

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

布局可能是这样的:
在此处输入图像描述

请按照以下链接进行参考:对于RadioGroup的listView

我希望这个能帮上忙

于 2012-09-03T07:48:16.360 回答
0

感谢 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;
            }
        }
    };
于 2016-02-07T12:35:16.227 回答