gpt4 book ai didi

android expandablelistview不展开也不接收点击事件

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:30:00 25 4
gpt4 key购买 nike

我这辈子都弄不明白为什么我的 ExpandableListView 没有展开...我在几乎所有我能找到的 ExpandableListView 的点击监听器中都使用了日志语句,但看起来它们都没有得到叫。

我知道有很多关于这个主题的帖子,但我已经通读了所有帖子并尝试了很多东西,但运气不佳,希望我遗漏了一些其他人很容易发现的小错误。

主要 Activity :

public class ForumListActivity extends Activity  {

private static ArrayList<Forum> forumList;
private static ArrayList<ArrayList<SubForum>> subForumList;
private ExpandableListView forumListView;
private ForumListAdapter forumListAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main_page);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

forumListView = (ExpandableListView) this.findViewById(R.id.main_page_forum_list);

forumList = new ArrayList<Forum>();
subForumList = new ArrayList<ArrayList<SubForum>>();
setUpForums(this);

forumListAdapter = new ForumListAdapter(this, forumList, subForumList);
forumListView.setAdapter(forumListAdapter);

forumListView.setOnGroupExpandListener(new OnGroupExpandListener(){
@Override
public void onGroupExpand(int groupPosition) {
Log.d("onGroupExpand", "this works?");
for(int i=0; i<forumListAdapter.getGroupCount(); i++) {
if(i != groupPosition)
forumListView.collapseGroup(groupPosition);
}
}
});

forumListView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
Log.d("onGroupClick:", "worked");
parent.expandGroup(groupPosition);
return true;
}
});
}

注意:方法 setUpForums() 只是获取系统数组并将它们放入 forumList 和 subForumList

ListView 适配器:

public class ForumListAdapter extends BaseExpandableListAdapter {

private ArrayList<Forum> groups;
private ArrayList<ArrayList<SubForum>> children;
private Context ctx;

public ForumListAdapter(Context ctx, ArrayList<Forum> groups, ArrayList<ArrayList<SubForum>> children) {
this.ctx = ctx;
this.groups = groups;
this.children = children;
}



@Override
public Object getChild(int groupPosition, int childPosition) {
return children.get(groupPosition).get(childPosition);
}



@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}



@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(ctx);
convertView = inflater.inflate(R.layout.forum_list_child_item_row, null);
}

SubForum currentSubForum = children.get(groupPosition).get(childPosition);
TextView name = (TextView)convertView.findViewById(R.id.child_row_forum_title);
TextView desc = (TextView)convertView.findViewById(R.id.child_row_forum_description);

if (name != null)
name.setText(currentSubForum.getName());

if (desc != null)
desc.setText(currentSubForum.getDescription());

convertView.setFocusableInTouchMode(true);
return convertView;
}



@Override
public int getChildrenCount(int groupPosition) {
return children.get(groupPosition).size();
}



@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}



@Override
public int getGroupCount() {
return groups.size();
}



@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}



@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null)
{
LayoutInflater inflater = LayoutInflater.from(ctx);
convertView = inflater.inflate(R.layout.forum_list_group_item_row, null);
}

Forum currentForum = (Forum) groups.get(groupPosition);
TextView name = (TextView) convertView.findViewById(R.id.group_item_forum_title);
//ImageView image = (ImageView) convertView.findViewById(R.id.group_item_expander_image);

if(name != null)
name.setText(currentForum.getName());

/*
if(image != null) {
int[][] group_state_sets = {{}, {android.R.attr.state_expanded}};
image.setVisibility(View.VISIBLE);
int stateSetIndex = (isExpanded ? 1 : 0) ;
Drawable drawable = image.getDrawable();
drawable.setState(group_state_sets[stateSetIndex]);
}
*/

return convertView;
}



@Override
public boolean hasStableIds() {
return true;
}



@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}


}

组布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/turquoise_gradient"
android:orientation="horizontal"
android:paddingTop="6dip"
android:paddingBottom="6dip"
android:paddingLeft="6dip" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/turquoise_gradient"
android:orientation="vertical"
android:padding="2dip" >

<TextView
android:id="@+id/group_item_forum_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:gravity="left"
android:paddingLeft="5dip"
android:textColor="@color/white"
android:textSize="16dip" />

</LinearLayout>

<!--
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center|right">

<ImageView
android:id="@+id/group_item_expander_image"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/collapse_down" />


</LinearLayout> -->

</LinearLayout>

子布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/turquoise_gradient"
android:orientation="horizontal"
android:paddingTop="6dip"
android:paddingBottom="6dip"
android:paddingLeft="6dip" >


<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="2dip"
android:background="@drawable/turquoise_gradient" >

<TextView
android:id="@+id/child_row_forum_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_gravity="center_vertical"
android:paddingLeft="5dip"
android:textColor="@color/white"
android:maxLines="1"
android:textSize="11dip" />

<TextView
android:id="@+id/child_row_forum_description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_gravity="center_vertical"
android:paddingLeft="15dip"
android:textColor="@color/white"
android:maxLines="2"
android:textSize="11dip" />

</LinearLayout>

</LinearLayout>

主页布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black"
android:orientation="vertical" >

<ExpandableListView
android:id="@+id/main_page_forum_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black"
android:divider="@color/black"
android:dividerHeight="1dip"
android:clickable="true" />

</LinearLayout>

非常感谢您提供的任何帮助!

最佳答案

我也遇到过和你一样的问题。经过几天的调查,我发现我做错了。所以我通过做一些小改动来修复它以使其正常工作。

让我们看一下 setOnGroupClickListenerboolean onGroupClick(...) 的主体。你返回了 true 这意味着 "the click was handled"

如果你想展开,你应该返回false。所以我建议你这样做:

forumListView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
Log.d("onGroupClick:", "worked");
parent.expandGroup(groupPosition);
return false;
}
});

android.widget.ExpandableListView类中,有一个名为boolean handleItemClick(View v, int position, long id)的方法负责展开/折叠组或将点击传递给适当的 child 。

 /* It's a group click, so pass on event */
if (mOnGroupClickListener != null) {
if (mOnGroupClickListener.onGroupClick(this, v,
posMetadata.position.groupPos, id)) {
posMetadata.recycle();
return true;
}
}

/* expanding/collapsing/other tasks... */

如果您实现 onGroupClick返回 true,则第 8 行以下的代码将永远不会执行。 (这意味着,组永远不会折叠、展开)

希望我的回答对您有所帮助:-)祝您好运!

关于android expandablelistview不展开也不接收点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11008286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com