关于在 Android 中构建 TreeView 控件的建议
最佳答案
我自己构建了一个支持 n 层的 treeview。它很容易在触摸屏上使用,尤其是在屏幕较大的设备上。
我使用了一个扩展 ListviewAdapter 的类并创建了我自己的 listitem。这些项目知道它们在哪个级别,并且它们继承了它们父级的 expandstate(通过记住它们自己的状态)。这棵树很快就可以处理数千个项目。
编辑:添加了代码,但是我在评论中写的方式,它不会有太大帮助,因为它非常接近我自己的需求。
package de.supinfo.FISDroid;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.PaintDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class EfficientAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Bitmap mIcon1;
private int active_view;
private int last_path;
public String[][] values = new String[0][];
public EfficientAdapter(Context context, String[][] str_arr_values, int int_active_view) {
// Cache the LayoutInflate to avoid asking for a new one each time.
mInflater = LayoutInflater.from(context);
values = str_arr_values;
active_view = int_active_view;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
int padding = 0;
// int selfstate = Integer.parseInt(values[position][4].trim());
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.xml.list_item_icon_text, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text_view);
holder.icon = (ImageView) convertView.findViewById(R.id.img_view);
holder.expanded = (ImageView) convertView.findViewById(R.id.ImageView01);
holder.llout = (LinearLayout) convertView.findViewById(R.id.list_item_icon_text);
holder.docs = (TextView) convertView.findViewById(R.id.doc_count);
holder.prun = (ImageView) convertView.findViewById(R.id.prun);
holder.coord = (ImageView) convertView.findViewById(R.id.coord);
holder.button = (Button) convertView.findViewById(R.id.button);
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
main.tabHost.setCurrentTab(2);
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Bind the data efficiently with the holder.
String text = values[position][0];
String docs = values[position][11];
if (!docs.equals("0")) {
// TODO
// Anzeige das Dokumente vorhanden sind, eventuell Anzahl
holder.docs.setText(docs);
holder.docs.setVisibility(View.VISIBLE);
} else {
holder.docs.setVisibility(View.INVISIBLE);
}
holder.coord.setVisibility(values[position][12].equals("") || values[position][12].equals("0") || values[position][12].equals("0.0") ? View.INVISIBLE : View.VISIBLE);
holder.prun.setVisibility(values[position][14].equals("") ? View.INVISIBLE : View.VISIBLE);
holder.text.setText(text);
holder.text.setTextSize(GlobalVars.Style.TextSize);
if (position == active_view) {
holder.text.setTextColor(R.color.headline_font);
PaintDrawable pd = new PaintDrawable(Color.RED);
holder.llout.setBackgroundDrawable(pd);
holder.text.setSingleLine(false);
holder.button.setVisibility(values[position][1].equals("-1") ? View.GONE : View.VISIBLE);
} else {
holder.text.setTextColor(R.color.headline_font);
PaintDrawable pd = new PaintDrawable(Color.TRANSPARENT);
holder.llout.setBackgroundDrawable(pd);
holder.text.setSingleLine(true);
holder.button.setVisibility(View.GONE);
}
int i = Integer.parseInt(values[position][5].trim());
mIcon1 = GlobalHelper.GetIcon(i);
holder.icon.setImageBitmap(mIcon1);
if (values[position][8].equals("-1")) {
holder.expanded.setVisibility(View.VISIBLE);
holder.expanded.setImageResource(android.R.drawable.ic_input_add);
} else if (values[position][8].equals("0")) {
holder.expanded.setVisibility(View.INVISIBLE);
} else if (values[position][8].equals("1")) {
holder.expanded.setVisibility(View.VISIBLE);
if (values[position][9].equals("1")) {
holder.expanded.setImageResource(android.R.drawable.ic_menu_revert);
} else {
holder.expanded.setImageResource(android.R.drawable.ic_input_add);
}
}
padding = Integer.parseInt(values[position][7].trim()) * 24;
convertView.setPadding(padding, 5, 5, 5);
return convertView;
}
static class ViewHolder {
LinearLayout llout;
TextView text;
ImageView icon;
ImageView expanded;
ImageView coord;
ImageView prun;
TextView docs;
Button button;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return values.length;
}
public String[] getValues(int position) {
return values[position];
}
public String getValue(int position) {
return values[position][0];
}
public String getDatid(int position) {
return values[position][1];
}
public String getPath(int position) {
return values[position][2];
}
public String getParent(int position) {
return values[position][3];
}
public void set_active_view() {
active_view = GlobalVars.cn.index;
}
public int get_active_view() {
return active_view;
}
public void set_last_path(int position) {
last_path = position;
}
public int get_last_path() {
return last_path;
}
}
编辑:添加了 xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/list_item_icon_text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:background="@color/tree_normal_back"
android:padding="1dip"
android:orientation="horizontal"
android:layout_width="fill_parent">
<LinearLayout
android:id="@+id/plusminus"
android:layout_height="48dip"
android:layout_width="24dip"
android:gravity="right|center_vertical">
<ImageView
android:id="@+id/ImageView01"
android:layout_height="24dip"
android:layout_width="24dip"/>
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_height="48dip"
android:layout_width="48dip"
android:orientation="horizontal"
android:paddingLeft="4dip">
<LinearLayout
android:id="@+id/LinearLayout02"
android:layout_height="48dip" android:orientation="vertical" android:layout_width="16dip">
<TextView
android:text="0"
android:id="@+id/doc_count"
android:textColorHighlight="@color/headline_font"
android:layout_gravity="center_vertical"
android:textColor="@color/black"
android:textSize="12dip"
android:layout_margin="0dip"
android:padding="0dip"
android:paddingTop="0dip"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/ico_24_paperclip"
android:textStyle="normal" android:layout_height="16dip" android:layout_width="16dip">
</TextView>
<ImageView
android:id="@+id/prun"
android:layout_gravity="center_vertical"
android:layout_height="16dip"
android:layout_width="16dip" android:background="@drawable/ico_24_prun"/>
<ImageView
android:id="@+id/coord"
android:layout_gravity="center_vertical"
android:layout_height="16dip"
android:layout_width="16dip" android:background="@drawable/ico_24_coord"/>
</LinearLayout>
<ImageView
android:id="@+id/img_view"
android:layout_gravity="center_vertical"
android:layout_height="24dip"
android:layout_width="24dip" />
</LinearLayout>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tabs_edit"
android:focusable="false"
android:visibility="gone">
</Button>
<TextView
android:layout_gravity="center_vertical"
android:padding="2dip"
android:marqueeRepeatLimit="2"
android:layout_width="wrap_content"
android:textSize="22dip"
android:textColor="@color/tree_normal_font"
android:id="@+id/text_view"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
关于android - 在 Android 中构建 TreeView 控件的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159758/
在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我正在使用Maruku,将Markdown(超集)转换为HTML,你知道我该怎么做才能从HTML转换为Markdown吗? 最佳答案 Google发现了一个名为reverse_markdown的ruby脚本.它似乎可以满足您的需求。 关于ruby-on-rails-我需要从HTML转到markdown,有什么建议吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/175162
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和
在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto
Ruby语言是否可以用于创建全新的移动操作系统或桌面操作系统,即是否可以用于系统编程? 最佳答案 嗯,现在有一些操作系统使用比C更高级的语言。基本上,ruby解释器本身需要用一些低级的东西来编写,并且需要一些引导加载代码将功能齐全的ruby解释器作为独立内核加载到内存中。一旦ruby解释器被引导并以内核模式(或innerrings之一)运行,就没有什么可以阻止您在其上构建整个操作系统。不幸的是,它可能会很慢。每个操作系统功能的垃圾收集可能会相当引人注目。ruby解释器将负责任务调度和网络堆栈等基本事情,使用垃圾收集框架会大大
这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi
我尝试了一些关于rubyonrails中openid利用率的搜索。然而,尽管出现了一组选项,例如omniauth、authlogic等,但这些gem通常用于构建接受openid身份验证的站点。换句话说,它们用于openid消费者设置。我也想构建自己的openid服务器。AssuggestedhereinOpenIdsite我发现了像Masquerade和local-openid这样的东西,不幸的是,它们不是非常活跃的项目,下载量很少。自建openidprovider服务器有没有其他设施可以推荐?非常感谢!!干杯,叶 最佳答案 虽