我正在尝试使用 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/
我正在学习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
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
所以...SublimeText具有折叠方法的内置功能,但是一旦方法声明跨越多行,它就会失去这种能力。有谁知道插件或使它工作的方法吗?具体来说,我在使用ruby时遇到了这个问题(我的团队遵守关于行长度的严格风格指南),但语言应该无关紧要。 最佳答案 无需单击出现在函数定义第一行旁边的装订线中的向下箭头,您需要做的就是将光标放在函数的一个缩进行上(不是缩进的函数参数,而是在函数定义本身)并使用CtrlShift[键绑定(bind)(在OSX上使用⌘Alt[)折叠函数及其参数。使用CtrlShift](⌘Alt]在OSX上)展开,或
最好用一个例子来解释:文件1.rb:deffooputs123end文件2.rb:classArequire'file1'endA.new.foo将给出错误“':调用了私有(private)方法'foo'”。我可以通过执行A.new.send("foo")来解决这个问题,但是有没有办法公开导入的方法?编辑:澄清一下,我没有混淆include和require。另外,我不能使用正常包含的原因(正如许多人正确指出的那样)是因为这是元编程设置的一部分。我需要允许用户在运行时添加功能;例如,他可以说“run-this-app--includefile1.rb”,应用程序的行为将根据他在file1
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:RubyblockandunparenthesizedargumentsWhatisthedifferenceorvalueoftheseblockcodingstylesinRuby?我一直认为以下只是同一件事的两种表达方式:[1,2,3].collect{|i|i*2}[1,2,3].collectdo|i|i*2end但是我在我的一个ERB模板中发现了一些奇怪的行为,这两种语法似乎在做两件不同的事情。这段代码效果很好:m))}}%>但是当我将其重写为:m))endend%>...我最终得到了我的@men
抱歉,如果重复(我没找到)这只是为了确认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=
嘿,我有一个看起来像这样的测试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
我正在尝试创建一条新路线,以便我可以利用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
如果我在我的rails项目中使用spork并且有一个像这样的spec_helper.rb文件require'spork'Spork.preforkdo...endSpork.each_rundo...end这是否意味着当我通过rspecspec运行我的规范时,我需要始终让spork运行?意思是,如果我还没有在终端窗口中执行$spork,是否意味着我的规范将无法正常运行? 最佳答案 没有。我们的spechelper中有spork,但我们不会经常使用它,因为它会减慢大型套件的整体测试速度。我们仅在快速迭代时运行spork,在TDD期间重
好吧,也许这很简单,但是......鉴于此: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"