onclicklistener不在方法内部工作

时间:2012-09-28 18:51:22

标签: android android-layout onclicklistener

我必须将从数据库查询的名称列表放入列表(而不是listview)。我可以通过使用自定义视图对linearlayout进行充气来实现。我创建了一个新类,其中有一个方法可以使用自定义视图来扩展布局。 在那个方法中,我已经实现了一个onclicklistener,但是它没有用。 代码:

public static void showPeopleInvitedList(Context context, View view, final LinearLayout layout) {
    dbAdapter = new DatabaseHandler(context);
    String[] ENTRIES = dbAdapter.getItems("user_friend_name");
    for (int i = 0; i < 5; i++ ) {
        LayoutInflater inflator = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflator.inflate(R.layout.people, layout, false);

        view.setId(layout.getChildCount() + 1);
        params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        view.setLayoutParams(params);
        view.setOnClickListener(myClickListener);
        layout.addView(view, 0, params);    


    }

    myClickListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.d("click", "clicked");
            layout.removeView(v);
        }
    };
}

但onclicklistener无法正常工作。我在主要活动中调用此方法。此方法位于扩展LinearLayout的类中 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您尚未实例化myClickListener,因此您要将视图的onClickListener设置为null。将其初始化移至for循环之前。

public static void showPeopleInvitedList(Context context, View view, final LinearLayout layout) {
    dbAdapter = new DatabaseHandler(context);
    String[] ENTRIES = dbAdapter.getItems("user_friend_name");

    myClickListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("click", "clicked");
            layout.removeView(v);
        }
    };
    for (int i = 0; i < 5; i++ ) {
        LayoutInflater inflator = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflator.inflate(R.layout.people, layout, false);

        view.setId(layout.getChildCount() + 1);
        params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        view.setLayoutParams(params);
        view.setOnClickListener(myClickListener);
        layout.addView(view, 0, params);    


    }

}