【问题标题】:All OnClickListeners react in one moment, when activity start当活动开始时,所有 OnClickListeners 都会在一个瞬间做出反应
【发布时间】:2013-03-18 16:23:42
【问题描述】:

我有 ListView 的活动。我需要向userWillGo 添加几个项目并将OnClickListener 添加到它们。

这是一个简单的代码,它不起作用,因为我只有在活动开始时才能得到所有项目OnClickListeners 的反应。

    public class UserDetailActivity extends Activity{
    ...
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.l_user_detail);

            Intent intent = getIntent();
            User user = (User) intent.getSerializableExtra("class");
            ...

            userWillGo = (LinearLayout) findViewById(R.id.linerLayout_userDetail_willGoTO);
            if (user.getUserWillGo().size() > 0)
                for (int i = 0; i < user.getUserWillGo().size(); i++) {
                    View myView = (View) LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_list, userWillGo, false);
                    ...
                    myView.setOnClickListener(mOnClickListener(this, curentEvent));
                    userWillGo.addView(myView);
                }

                ...
        }

        private View.OnClickListener mOnClickListener(UserDetailActivity userDetailActivity, Event curentEvent) {
            Intent i = new Intent(userDetailActivity, EventDetailActivity.class);
            i.putExtra("class", curentEvent);
            startActivity(i);
            return null;
        }

帮助修复此错误。谢谢。

【问题讨论】:

    标签: android view android-activity onclick onclicklistener


    【解决方案1】:

    您将mOnClickListener 声明为一个返回null 的函数,但它的名称表明您希望mOnClickListener 成为一个变量...

    private View.OnClickListener mOnClickListener(UserDetailActivity userDetailActivity, Event curentEvent) {
        ...
        return null;
    }
    

    您需要创建一个自定义类来接受您的参数,创建该类的一个实例,然后使用它。


    再想你可以使用类似的东西:

    private View.OnClickListener createOnClickListener(UserDetailActivity userDetailActivity, final Event currentEvent) {
        return new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(v.getContext(), EventDetailActivity.class);
                i.putExtra("class", currentEvent);
                startActivity(i);
            }
        };
    }
    

    (有了这个版本,你甚至不需要userDetailActivity。)

    【讨论】:

    • 我明白了,谢谢。我会试试的。
    • @SimonZettervall 不是每个答案都需要示例代码,尽管我已经写了一些。请记住,SO 的目标不是为您完成工作,而是教您如何去做。
    • @ρяσѕρєяK 谢谢,我想提一下,但我忘了。
    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多