所以我有一个显示随机文本的 ListView 。 textview 有时可能是常规文本,但也可以是 URL 等。我将以下行添加到我的 BaseAdapter 代码中:
Linkify.addLinks(mHolder.content, Linkify.WEB_URLS);
其中 mHolder 是 ViewHolder 的一个实例,用于加快 listView 的速度,内容是该 viewHolder 内的 TextView,我只愿意突出显示 Web Urls。
第一个问题,
自从添加该行代码后,一些只有常规文本(如“asdfg”)的项目现在在单击时不再突出显示。澄清一下,当我说“突出显示”时,我只是指单击 listView 项目时发生的常规突出显示,无论是否提供了处理 onClick 事件的代码。
我知道这里的问题是那行代码,因为删除它会使 listView 上的所有项目在单击时突出显示。我试图通过这个 screenshot 来描述这个
第二个问题,
我在listView中添加了一个MultiChoiceModeListener来处理ActionMode;然而,考虑到 textViews 中的链接现在可以点击并启动浏览器,它们在 ActionMode 中不再正常运行,因为它们不关心我们处于 ActionMode 中并仍然启动浏览器而不是遵循onItemCheckedStateChanged 方法。
例如,在 ActionMode 中,用户点击的每个项目都会添加到名为 itemsChecked 的 ArrayList 中,稍后将通过 onActionItemClicked 使用。但是,当使用 linkify 时,这不再可行,因为当用户单击具有 Web Url 作为文本的 ListView 项目时,应用程序将发送到后台,因为调用浏览器来处理链接。
我的问题是我该怎么做才能修复我的代码中的这些问题?
我想让链接突出显示并可点击,但不是以此为代价。我应该使用 Linkify 以外的其他东西来突出显示链接并使它们可点击吗?或者是“可点击性”总是会干扰 ListView 项目的常规行为。
仅供引用,我为 ActionMode 和 ListView 运行的代码如下:(请记住,代码在不使用 Linkify 时可以正常工作
private MultiChoiceModeListener modeListener = new MultiChoiceModeListener() {
@SuppressLint("NewApi")
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
String text = listItems.get(position);
if (checked) {
itemsChecked.add(text);
}
else {
int index = itemsChecked.indexOf(text);
itemsChecked.remove(index);
}
}
@SuppressLint("NewApi")
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case 0:
mode.finish();
return true;
case R.id.menu_merge:
mergeStrings();
mode.finish();
return true;
case R.id.menu_star:
return false;
default:
return false;
}
}
@SuppressLint("NewApi")
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
inActionMode = true;
itemsChecked = new ArrayList<String>();
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
@SuppressLint("NewApi")
@Override
public void onDestroyActionMode(ActionMode mode) {
inActionMode = false;
}
@SuppressLint("NewApi")
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
};
@SuppressLint("NewApi")
private void initViews () {
listView = (ListView) findViewById(R.id.home_list_view);
if (isOldAPI) {
registerForContextMenu(listView);
}
else {
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(modeListener);
}
mAdapter = new MyAdapter(this, listItems, isOldAPI);
listView.setAdapter(mAdapter);
}
最佳答案
好吧,在暗中寻找答案一段时间后,感谢AOSP MMS code.,我终于得到了它。感谢 Rascarlo 在 github 上发帖,尽管我认为我也可以通过 CM 和其他项目获得。
所以,问题是我在我的适配器中使用了这行代码:
Linkify.addLinks(mHolder.content, Linkify.WEB_URLS);
当所有这些都可以通过使用预建属性更好地解决 TextView 的 XML 问题时 android:autoLink ,它必须设置为您喜欢的任何方案 - 在我的例子中是 web ;和 android:linksClickable ,如果您希望点击突出显示订单项,则必须设置为FALSE。将它设置为 true 也可以,通过 longclick 的上下文菜单可以工作,但它不会突出显示。请注意,通过将其设置为 false,您将必须通过代码而不是通过点击来处理此类链接的打开。
这是我的 ListView 项目的 XML 代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/clip_list_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="4dp"
android:autoLink="web"
android:linksClickable="false"
android:textAppearance="?android:attr/textAppearanceMedium" />
希望能帮到想不明白的人。
关于android - Linkify、ListView 和 ActionMode。常规文本不再可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14135228/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我有这个代码:context"Visitingtheusers#indexpage."dobefore(:each){visitusers_path}subject{page}pending('iii'){shouldhave_no_css('table#users')}pending{shouldhavecontent('Youhavereachedthispageduetoapermissionic错误')}它会导致几个待处理,例如ManagingUsersGivenapractitionerloggedin.Visitingtheusers#indexpage.#Noreason
我一直在玩一个脚本,它在Chrome中获取选定的文本并在Google中查找它,提供四个最佳选择,然后粘贴相关链接。它以不同的格式粘贴,具体取决于当前在Chrome中打开的页面-DokuWiki打开的DokuWiki格式,普通网站的HTML,我想要我的WordPress所见即所得编辑器的富文本。我尝试使用pbpaste-Preferrtf来查看没有其他样式的富文本链接在粘贴板上的样子,但它仍然输出纯文本。在文本编辑中保存文件并进行试验后,我想出了以下内容text=%q|{\rtf1{\field{\*\fldinst{HYPERLINK"URL"}}{\fldrsltTEXT}}}|te
我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位
我想获取任意的ASCII文本字符串,例如“Helloworld”,并将其压缩为字符数较少(尽可能少)的版本,但要采用可以解压缩的方式。压缩版本应仅由ascii字符组成。有没有一种方法可以做到这一点,尤其是在Ruby中? 最佳答案 如果知道只会使用ASCII字符,那就是每个字节的低7位。通过位操作,您可以将每8个字节混合成7个字节(节省12.5%)。如果您可以将其放入更小的范围(仅限64个有效字符),则可以删除另一个字节。但是,因为您希望压缩形式也只包含ASCII字符,所以会丢失一个字节-除非您的输入可以限制为64个字符(例如,有损压
多年来,我在各种网站上遇到过各种问题,用户在字符串和文本字段的开头/结尾放置空格。有时这些会导致格式/布局问题,有时会导致搜索问题(即搜索顺序看起来不对,但实际上并非如此),有时它们实际上会使应用程序崩溃。我认为这会很有用,而不是像我过去所做的那样放入一堆before_save回调,向ActiveRecord添加一些功能以在保存之前自动调用任何字符串/文本字段上的.strip,除非我告诉它不是,例如do_not_strip:field_x,:field_y或类定义顶部的类似内容。在我去弄清楚如何做到这一点之前,有没有人看到更好的解决方案?明确一点,我已经知道我可以做到这一点:befor
我正在尝试使用nokogirigem提取页面上的所有url及其链接文本,并将链接文本和url存储在散列中。FooBar我想回去{"Foo"=>"#foo","Bar"=>"#bar"} 最佳答案 这是一个单行:Hash[doc.xpath('//a[@href]').map{|link|[link.text.strip,link["href"]]}]#=>{"Foo"=>"#foo","Bar"=>"#bar"}拆分一点可以说更具可读性:h={}doc.xpath('//a[@href]').eachdo|link|h[link.t
有人可以花我一些代码,在图像底部添加文本吗?我想使用Rmagick,但我也愿意使用其他工具。 最佳答案 我也发现了这个,它非常适合我。require'RMagick'includeMagick#Dimisionsbasedonanimage3072x2048unlessARGV[0]andFile.exists?(ARGV[0])puts"\n\n\nYouneedtospecifyafilename:watermark.rb\n\n\n"exitendimg=Image.read(ARGV[0]).firstnew_img="wm
下面的代码是xml文件中的一行:455360226如何使用ruby将2个标签之间的数字替换为另一个数字? 最佳答案 不可能一步修改文件内容(至少我不知道,当文件大小改变时)。您必须读取文件并将修改后的文本存储在另一个文件中。replace="100"infile="xmlfile_in"outfile="xmlfile_out"File.open(outfile,'w')do|out|out\d+/,"#{replace}")end或者您将文件内容读入内存,然后用修改后的内容覆盖文件:replace="100"filename=