0

我有活动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;
        }

帮助修复此错误。谢谢。

4

1 回答 1

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

于 2013-03-18T16:27:05.277 回答