Listview onClickListener 在抽屉布局中不起作用
Listview onClickListener is not working in Drawer Layout
我正在做一个抽屉,里面有 ListView
。但令人惊讶的是,当我单击任何列表项时,它没有触发任何 onClickListener
。
到目前为止我已经尝试过这些东西
- 为
ListView
制作 ArrayAdapter
并简单地获得 list.onItemClickListener
和 list.onClickListener
。
- 带有已实现
OnClickListener
的自定义适配器
还有布局,我也试过这些方法
- 具有父级的布局
TextView
- 以
RelativeLayout
作为父级的布局
尝试了上面的每个案例,直到现在我都没有任何工作。我想代码运行良好,但布局可能存在一些问题,但尝试了一切我仍然一无所知。
这是我当前的项目布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/image"
android:text="@string/app_label"
android:paddingTop="14dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:contentDescription="@string/app_label"
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:padding="10dp"
android:src="@drawable/thumb" />
</RelativeLayout>
这是我的自定义适配器
/****** Depends upon data size called for each row , Create each ListView row *****/
@SuppressLint("SimpleDateFormat")
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (convertView == null) {
/****** Inflate tabitem.xml file for each row ( Defined below ) *******/
vi = inflater.inflate(R.layout.drawer_list_item, null);
/****** View Holder Object to contain tabitem.xml file elements ******/
holder = new ViewHolder();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.image = (ImageView) vi.findViewById(R.id.image);
/************ Set holder with LayoutInflater ************/
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
if (data.size() <= 0) {
holder.text.setText("No Music Found!");
} else {
tempValues = null;
tempValues = (ListModel) data.get(position);
String txt = tempValues.getCompanyName().toString();
holder.text.setText(txt);
vi.setOnClickListener(new OnItemClickListener(position));
// Set Values and listeners her
}
return vi;
}
/********* Called when Item click in ListView ************/
private class OnItemClickListener implements OnClickListener {
private int mPosition;
OnItemClickListener(int position) {
mPosition = position;
}
@Override
public void onClick(View arg0) {
Toast.makeText(activity, "rgrg", Toast.LENGTH_SHORT).show();
HomeActivity sct = (HomeActivity) activity;
sct.onDrawerItemClick(mPosition);
}
}
@Override
public void onClick(View arg0) {
// Default onClick
Toast.makeText(activity, "rgrg", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.i("Long", "msg");
return true;
}
这是我的 activity
mPlanetTitles = getResources().getStringArray(R.array.planets);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// Set the adapter for the list view
setListData();
DrawerAdapter adapter = new DrawerAdapter(this,
CustomListViewValuesArr, getResources());
mDrawerList.setAdapter(adapter);
mDrawerList.setClickable(true);
这里是 activity even
中的监听器
public void onDrawerItemClick(int mPosition) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "fgsg", Toast.LENGTH_SHORT).show();
}
我没有日志也没有 Toast,这表明没有点击任何内容。尝试了很多之后,决定向你们寻求帮助!
编辑
我做了一些进一步的查找,看看发生了什么,并在 listview
中添加了 button
。在抽屉中,按钮甚至没有获得 onPressed
颜色并且在按下它时悬停。总而言之,布局反应迟钝或不提供任何反馈。
在你的 RelativeLayout
中设置 android:clickable="true"
。或者,更好的方法是在 ListView
.
上设置 OnItemClickListener
yourListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO: do your stuff
}
});
不要将点击侦听器放在视图上,而是在初始化后在 relativelayout 上进行
您需要通过ListView.setOnItemClickListener(...)
设置列表项点击监听器
感谢大家对这个问题提出的建议。但是我已经找到了这种异常行为的原因。这是因为在 Activity 的 XML 文件(不是项目列表 XML)中定义了 RelativeLayout
(外部抽屉布局)。在删除该代码时,点击就像魅力一样。 :) 抱歉没有在此处包含该代码..
您必须在抽屉列表视图上方的 FrameLayout 中设置一个片段,而不是相对布局!
我正在做一个抽屉,里面有 ListView
。但令人惊讶的是,当我单击任何列表项时,它没有触发任何 onClickListener
。
到目前为止我已经尝试过这些东西
- 为
ListView
制作ArrayAdapter
并简单地获得list.onItemClickListener
和list.onClickListener
。 - 带有已实现
OnClickListener
的自定义适配器
还有布局,我也试过这些方法
- 具有父级的布局
TextView
- 以
RelativeLayout
作为父级的布局
尝试了上面的每个案例,直到现在我都没有任何工作。我想代码运行良好,但布局可能存在一些问题,但尝试了一切我仍然一无所知。
这是我当前的项目布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/image"
android:text="@string/app_label"
android:paddingTop="14dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:contentDescription="@string/app_label"
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:padding="10dp"
android:src="@drawable/thumb" />
</RelativeLayout>
这是我的自定义适配器
/****** Depends upon data size called for each row , Create each ListView row *****/
@SuppressLint("SimpleDateFormat")
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (convertView == null) {
/****** Inflate tabitem.xml file for each row ( Defined below ) *******/
vi = inflater.inflate(R.layout.drawer_list_item, null);
/****** View Holder Object to contain tabitem.xml file elements ******/
holder = new ViewHolder();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.image = (ImageView) vi.findViewById(R.id.image);
/************ Set holder with LayoutInflater ************/
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
if (data.size() <= 0) {
holder.text.setText("No Music Found!");
} else {
tempValues = null;
tempValues = (ListModel) data.get(position);
String txt = tempValues.getCompanyName().toString();
holder.text.setText(txt);
vi.setOnClickListener(new OnItemClickListener(position));
// Set Values and listeners her
}
return vi;
}
/********* Called when Item click in ListView ************/
private class OnItemClickListener implements OnClickListener {
private int mPosition;
OnItemClickListener(int position) {
mPosition = position;
}
@Override
public void onClick(View arg0) {
Toast.makeText(activity, "rgrg", Toast.LENGTH_SHORT).show();
HomeActivity sct = (HomeActivity) activity;
sct.onDrawerItemClick(mPosition);
}
}
@Override
public void onClick(View arg0) {
// Default onClick
Toast.makeText(activity, "rgrg", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.i("Long", "msg");
return true;
}
这是我的 activity
mPlanetTitles = getResources().getStringArray(R.array.planets);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// Set the adapter for the list view
setListData();
DrawerAdapter adapter = new DrawerAdapter(this,
CustomListViewValuesArr, getResources());
mDrawerList.setAdapter(adapter);
mDrawerList.setClickable(true);
这里是 activity even
中的监听器public void onDrawerItemClick(int mPosition) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "fgsg", Toast.LENGTH_SHORT).show();
}
我没有日志也没有 Toast,这表明没有点击任何内容。尝试了很多之后,决定向你们寻求帮助!
编辑
我做了一些进一步的查找,看看发生了什么,并在 listview
中添加了 button
。在抽屉中,按钮甚至没有获得 onPressed
颜色并且在按下它时悬停。总而言之,布局反应迟钝或不提供任何反馈。
在你的 RelativeLayout
中设置 android:clickable="true"
。或者,更好的方法是在 ListView
.
OnItemClickListener
yourListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO: do your stuff
}
});
不要将点击侦听器放在视图上,而是在初始化后在 relativelayout 上进行
您需要通过ListView.setOnItemClickListener(...)
感谢大家对这个问题提出的建议。但是我已经找到了这种异常行为的原因。这是因为在 Activity 的 XML 文件(不是项目列表 XML)中定义了 RelativeLayout
(外部抽屉布局)。在删除该代码时,点击就像魅力一样。 :) 抱歉没有在此处包含该代码..
您必须在抽屉列表视图上方的 FrameLayout 中设置一个片段,而不是相对布局!