【问题标题】:What would a better implementation for associating an OnClickListener() for multiple views than this array method?与此数组方法相比,为多个视图关联 OnClickListener() 的更好实现是什么?
【发布时间】:2020-07-30 11:29:15
【问题描述】:

所以我有多个视图(多个文本框和图像的组合),我已将 onClickListener 附加到视图,然后将 onClick 方法附加到它们,之后我在 @987654323 中使用了 switch 语句@ 相同。

ConstraintLayout[] ll_but = new ConstraintLayout[10];

ll_but[0] = findViewById(R.id.success_stories_tile);
        ll_but[1] = findViewById(R.id.misc_but3_layout);
        ll_but[2] = findViewById(R.id.misc_but2_layout);
        ll_but[3] = findViewById(R.id.faqs_tile);
        ll_but[4] = findViewById(R.id.mohfw_ll2);
        ll_but[5] = findViewById(R.id.mohfw_ll3);
        ll_but[6] = findViewById(R.id.mohfw_ll4);
        ll_but[7] = findViewById(R.id.mohfw_ll5);


        int[] btnToAdd = new int[]{0, 1, 2, 3, 4, 5, 6 , 7};

        for (int i = 0; i < btnToAdd.length; i++) {
            ll_but[btnToAdd[i]].setOnClickListener(this);
        }

 @Override
    public void onClick(View view) {
        Intent i = null;

        switch (view.getId()){
            case R.id.flipperLeft:
                viewFlipper.stopFlipping();
                viewFlipper.setInAnimation(anim1);
                viewFlipper.setOutAnimation(anim4);
                viewFlipper.showNext();
                break;
            case R.id.flipperRight:
                viewFlipper.stopFlipping();
                viewFlipper.setInAnimation(anim2);
                viewFlipper.setOutAnimation(anim3);
                viewFlipper.showPrevious();
                break;
            case R.id.misc_but2_layout:
                i = new Intent(homeActivity.this, ChatActivity.class);
                startActivity(i);
                break;
            case R.id.misc_but3_layout:
                i = getMythIntent(this);
                startActivity(i);
                break;
            case R.id.success_stories_tile:
                i = getSuccessStoriesIntent(this);
                startActivity(i);
                break;
            case R.id.faqs_tile:
                i = getFAQsIntent(this);
                startActivity(i);
                break;
            case R.id.mohfw_ll2:
            case R.id.mohfw_ll3:
            case R.id.mohfw_ll4:
            case R.id.mohfw_ll5:
                i = getTwitterIntent ( this );
                startActivity(i);
                break;

            default:
                i = null;
                break;
        }

    }

这对我有用,但我真的很想知道是否有更好的实现。

【问题讨论】:

标签: java android android-studio onclick onclicklistener


【解决方案1】:

Android Studio 现在在他们的 IDE 中实现了类似 Butterknife 的功能,因此,您可以在 onCreateView() 中使用 &lt;YourLayoutName&gt;Binding binding = &lt;YourLayoutName&gt;Binding.inflate();

例如: LoginFragmentBinding binding = LoginFragmentBinding.inflate(inflater, container, false);

这样,您可以使用例如binding.miscBut3Layout.setOnClickListener(this); 而不是可以返回异常的getViewById

侦听器的另一种方法是将它们放入带有属性android:onclick="" 的视图的 XML 中,您无需为视图创建数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2021-05-11
    • 2013-07-26
    • 2013-04-06
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多