草庐IT

android - ExpandableListView 总是折叠的

coder 2023-12-11 原文

我正在尝试使用 ExpandableListView 构建基本的 Android 应用程序。将数据放入 View 后,我只能看到组,如果我单击组,它们不会展开。

这是我的代码,有人可以帮忙吗?

适配器



    public class PhraseAdapter extends BaseExpandableListAdapter {

        private LayoutInflater inflater;

        private List data;

        public PhraseAdapter(Context context) {
            inflater = LayoutInflater.from(context);

        }

        public void setData(List data) {
            this.data = data;
        }

        public View inflate(int viewId) {
            View view = inflater.inflate(viewId, null);
            return view;
        }

        public void updateView(List categories) {
            setData(categories);
            notifyDataSetChanged();
        }

        static class ViewHolder {
            TextView name;
        }

        static class ViewChildHolder {
            TextView phonetix;
            TextView orginal;
        }

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

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

        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            final ViewChildHolder holder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.phrases__extra_item, null);
                holder = new ViewChildHolder();
                holder.phonetix = (TextView) convertView
                        .findViewById(R.id.phrases_phonetix);
                holder.orginal = (TextView) convertView
                        .findViewById(R.id.phrases_original);

                convertView.setTag(holder);
                convertView.setClickable(true);

            } else {
                holder = (ViewChildHolder) convertView.getTag();
            }

            holder.phonetix.setText(data.get(groupPosition).getPhonetix());
            holder.orginal.setText(data.get(groupPosition).getOriginal());
            convertView.setFocusableInTouchMode(true);
            return convertView;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return 1;
        }

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

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

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

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            final ViewHolder holder;

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.phrases_item, null);
                holder = new ViewHolder();
                holder.name = (TextView) convertView
                        .findViewById(R.id.phrases_text);
                convertView.setTag(holder);
                convertView.setClickable(true);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.name.setText(data.get(groupPosition).getName());
            return convertView;

        }

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

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

短语 Activity



    public class PhrasesActivity extends Activity {
        private PhraseAdapter phraseAdapter;
        private PhraseDao dao;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.phrases);
            dao = new PhraseDao();


            final ExpandableListView mainListView = (ExpandableListView) findViewById(R.id.phrases_list);
            phraseAdapter = new PhraseAdapter(this);
            phraseAdapter.setData(dao.getPhrasesByCategoryId(1));
            mainListView.setAdapter(phraseAdapter);

        }
    }

和简单的 xml 布局

短语.xml

<?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:orientation="vertical" >



<ExpandableListView
    android:id="@+id/phrases_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:groupIndicator="@null"
    android:clickable="true" />

</LinearLayout>

phrases_item.xml

<?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="wrap_content"
android:clickable="true"
android:gravity="center_vertical|left"
android:orientation="vertical"
android:paddingBottom="0dip"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:paddingTop="0dip" >

<TextView
    android:id="@+id/phrases_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="0dip"
    android:paddingLeft="0dip"
    android:paddingRight="0dip"
    android:paddingTop="0dip" >
</TextView>

</LinearLayout>

短语__extra_item.xml

<?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="wrap_content"
android:clickable="true"
android:gravity="center_vertical|left"
android:orientation="vertical"
android:paddingBottom="0dip"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:paddingTop="0dip" >

<TextView
    android:id="@+id/phrases_phonetix"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="0dip"
    android:paddingLeft="0dip"
    android:paddingRight="0dip"
    android:paddingTop="0dip" >
</TextView>

<TextView
    android:id="@+id/phrases_original"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="0dip"
    android:paddingLeft="0dip"
    android:paddingRight="0dip"
    android:paddingTop="0dip" >
</TextView>

</LinearLayout>

谢谢

最佳答案

您好,我认为下面的代码对您有帮助。这防止折叠 ListView 。

    int count = exadapter.getGroupCount();

    for (int i = 0; i < count; i++)
    {
        expListView.expandGroup(i);
    }

在您的可扩展 ListView 中使用上面的代码。它可以解决您的问题

关于android - ExpandableListView 总是折叠的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375702/

有关android - ExpandableListView 总是折叠的的更多相关文章

  1. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby - Sublime Text 3 多行法折叠 - 2

    所以...SublimeText具有折叠方法的内置功能,但是一旦方法声明跨越多行,它就会失去这种能力。有谁知道插件或使它工作的方法吗?具体来说,我在使用ruby​​时遇到了这个问题(我的团队遵守关于行长度的严格风格指南),但语言应该无关紧要。 最佳答案 无需单击出现在函数定义第一行旁边的装订线中的向下箭头,您需要做的就是将光标放在函数的一个缩进行上(不是缩进的函数参数,而是在函数定义本身)并使用CtrlShift[键绑定(bind)(在OSX上使用⌘Alt[)折叠函数及其参数。使用CtrlShift](⌘Alt]在OSX上)展开,或

  4. ruby - Ruby 导入的方法总是私有(private)的吗? - 2

    最好用一个例子来解释:文件1.rb:deffooputs123end文件2.rb:classArequire'file1'endA.new.foo将给出错误“':调用了私有(private)方法'foo'”。我可以通过执行A.new.send("foo")来解决这个问题,但是有没有办法公开导入的方法?编辑:澄清一下,我没有混淆include和require。另外,我不能使用正常包含的原因(正如许多人正确指出的那样)是因为这是元编程设置的一部分。我需要允许用户在运行时添加功能;例如,他可以说“run-this-app--includefile1.rb”,应用程序的行为将根据他在file1

  5. ruby-on-rails - 为什么 do/end 和 {} 不总是等价的? - 2

    这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:RubyblockandunparenthesizedargumentsWhatisthedifferenceorvalueoftheseblockcodingstylesinRuby?我一直认为以下只是同一件事的两种表达方式:[1,2,3].collect{|i|i*2}[1,2,3].collectdo|i|i*2end但是我在我的一个ERB模板中发现了一些奇怪的行为,这两种语法似乎在做两件不同的事情。这段代码效果很好:m))}}%>但是当我将其重写为:m))endend%>...我最终得到了我的@men

  6. ruby - Ruby 中的 "=="是否总是值相等? - 2

    抱歉,如果重复(我没找到)这只是为了确认Ruby的运算符==始终执行相等比较。IE。a==b将a的值与b的值进行比较,而不是像Java那样比较它们是否指向内存中的同一个对象(对于后者,在Ruby中,您应该使用a.object_id==b.object_id).因此,在Ruby中将字符串值与==进行比较是安全的(而在Java中这样做并不安全)谢谢编辑:问题在于任何Ruby对象的默认==行为,因为它会误导Java-C-C++程序员假设a==b比较引用本身,而不是引用内容。无论如何,你可以检查这段代码,使用字符串one="hello"two="he"two编辑2。所以,在Ruby中,比较a=

  7. ruby-on-rails - Rails 4 测试用户初始化总是空白 - 2

    嘿,我有一个看起来像这样的测试test'createaccount'doifUser.create(email:'me@test.com',password:'blahblah')asserttrueelseassertUser.msgendend但是当我尝试运行它时,我收到如下错误消息:1)Error:UserTest#test_create_account:ActiveRecord::RecordNotUnique:PG::UniqueViolation:ERROR:duplicatekeyvalueviolatesuniqueconstraint"index_users_on_e

  8. ruby-on-rails - Ruby On Rails 自定义路由总是重定向到 Controller 的显示操作 - 2

    我正在尝试创建一条新路线,以便我可以利用RoR的路径变量功能,即new_game_path。就我而言,我想使用load_game_path我已经为适当的Controller创建了一个Action,目前路由如下:resources:gamesdoget'load',on::collectionend每次我使用load_games_path它都使用正确的URI,但似乎重定向到GamesController的显示操作并显示游戏的继承显示View。我检查了rakeroutes,我看到我新创建的路线似乎是所需的路径/games/load(文件路径:/views/games/load.html.e

  9. ruby-on-rails - 使用 spork 的 Rails 项目 - 总是必须使用 spork? - 2

    如果我在我的rails项目中使用spork并且有一个像这样的spec_helper.rb文件require'spork'Spork.preforkdo...endSpork.each_rundo...end这是否意味着当我通过rspecspec运行我的规范时,我需要始终让spork运行?意思是,如果我还没有在终端窗口中执行$spork,是否意味着我的规范将无法正常运行? 最佳答案 没有。我们的spechelper中有spork,但我们不会经常使用它,因为它会减慢大型套件的整体测试速度。我们仅在快速迭代时运行spork,在TDD期间重

  10. ruby - 枚举器 `Array#each` 's {block} can' t 总是更改数组值? - 2

    好吧,也许这很简单,但是......鉴于此:arr=("a".."z").to_aarr=>["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]..我正在尝试将所有“arr”值更改为“bad”为什么这行不通?arr.each{|v|v="bad"}arr=>["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v"

随机推荐