当活动开始时,所有OnClickListeners都会在一瞬间做出反应

时间:2013-03-18 16:23:42

标签: android view android-activity onclick onclicklistener

我与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;
        }

帮助修复此错误。日Thnx。

1 个答案:

答案 0 :(得分:5)

您将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。)