Listview监听器没有被调用

时间:2013-09-25 11:54:17

标签: android listview listener

我有按钮,点击后会显示一个列表视图,点击列表视图项目时必须在logcat上打印一些内容。我实现了这个,列表视图及其监听器出现在按钮onclick监听器内。

除了没有调用listview监听器之外,一切都运行良好(即点击listview项目时没有在logcat上打印)

这是我的倾听者。

public class MyClickListener implements View.OnClickListener {
    LinearLayout parent;
    LayoutInflater layoutInflater;
    Context context;
    Home home;

    @Override
    public void onClick(View view) {
        parent = (LinearLayout) home.findViewById(R.id.main_view);
        View childLayout = layoutInflater.inflate(R.layout.mylayout, (ViewGroup) view.findViewById(R.id.list_layout));
        parent.addView(childLayout, 0);

        LinearLayout layout = (LinearLayout) home.findViewById(R.id.main_view);
        ListView list = (ListView) layout.findViewById(R.id.list);
        list.setAdapter(new MyListAdapter(context));
        lsit.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                System.out.println("hello Android");
            }
        });
    }
}

mylayout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/list_layout"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:padding="15dp">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list"
        android:padding="15dp"
        android:divider="@android:color/transparent"
        android:dividerHeight="5dp"
        android:listSelector="@android:color/transparent"
        android:cacheColorHint="@android:color/transparent"/>
</LinearLayout>

Home.java

public class Home extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.home);
        Button button= (Button) findViewById(R.id.but);
        button.setOnClickListener(new MyClickListener(this,this,layoutInflater));
    }
}

home.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:background="@color/background">
...
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:id="@+id/main_view">
    </LinearLayout>
.....

任何人都可以提供帮助

编辑1

MyListAdapter.java

private class MyListAdapter extends BaseAdapter {
        String[] items;
        LayoutInflater inflater;
        Context context;

        public MyListAdapter(Context context) {
            this.context = context;
            Resources resources = context.getResources();
            items = new String[]{resources.getString(R.string.q1), resources.getString(R.string.q2), resources.getString(R.string.q3)};
        }

        @Override
        public int getCount() {
            return items.length;
        }

        @Override
        public Object getItem(int i) {
            return i;
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View view1 = view;
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (view == null)
                view1 = inflater.inflate(R.layout.list_layout_item, null);
            TextView question = (TextView) view1.findViewById(R.id.itemtext);
            question.setText(items[i]);
            return view1;
        }
    }

list_layout_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/item"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              style="@style/itemStyle">

    <TextView
        android:id="@+id/itemtext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:drawableRight="@drawable/disclosure_indicator"/>
</LinearLayout>

2 个答案:

答案 0 :(得分:0)

从onClick()方法中删除此代码,并在该onClick()方法之外实现。只需在那里设置适配器,但实现错误og onItemClickListener()。

lsit.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                System.out.println("hello Android");
            }
        });

答案 1 :(得分:0)

确保list_item_layout中没有任何元素正在窃取事件,例如带有setClickable(true)的按钮或TextView。