在我目前的项目中,我已经处理过spinner类,它几乎可以从各个方面进行定制.因此,当我处理它时,我已经获得了一些详细的方面.所以我将从它显示为什么它有缺陷的部分开始.
1_T在弹出窗口/布局/对话框created-shows(布局膨胀)事件中没有默认侦听器.有一些解决方法,如微调器上的ontouch监听器,然后检查是否在旋转器区域发生触摸完成,然后你知道弹出窗口将显示但仍然不可靠,因为你可以用异步任务填充弹出窗口.
2_再次选择相同索引时,不会触发项目选定事件.这真的很烦人,因为我可能会根据其他条件更新适配器,这将改变当前选择和列表顺序等...当然有一种解决方法,通过创建自己的微调器类并将其添加到xml中,如com.myproject.customspinner等......(Spinner:onItemSelected在所选项目保持不变时不被调用)
3_Spinner没有可用的功能 OnClickListener和OnItemLongTouchListener事件.
4_Changing Spinner DropDown列表divider元素的属性(如颜色)比更改所有dropdrown和spinner的背景视图本身需要更多的劳动,这是非常荒谬的.
5_Spinner这个名字本身很荒谬=))).
那么我可以用什么而不是Spinner?哪种方式最好?
我一直在做一些实验来测量android上的sqlite性能.我对结果感到失望.我所做的是向表中插入10.000个查询,并且需要130-140秒 才能满足这些条件 ;
1.三星galaxy s3处于省电模式
2.插入的数据(或类)有3个字符串和1个浮点数(对于sqlite是真的)
3.插入事件正在asynctask中完成.
4.在asynctask中,我显示了一个进度对话框,其中包含传递的计时器文本(System.currentTimeMillis - seconds etc blala)
class AddStudentsTask extends AsyncTask<Void,Integer,Void>
{
ProgressDialog prgDialog;
int max = 10000;
Student s;
long seconds = System.currentTimeMillis();
@Override
protected void onPreExecute() {
super.onPreExecute();
prgDialog = new ProgressDialog(MainActivity.this);
prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
prgDialog.setMessage(seconds+"");
prgDialog.setMax(max);
prgDialog.setCancelable(false);
prgDialog.show();
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate();
prgDialog.setProgress(values[0]);
sList.add(s);
String s = (System.currentTimeMillis()-seconds)/100+"";
if(s.length()>2)
s = s.substring(0,s.length()-1) + "." + s.charAt(s.length()-1);
else if(s.length() == 2)
s = s.charAt(0) + …Run Code Online (Sandbox Code Playgroud) 每次Edittext onAfterTextChange方法时,我都会检查是否输入了一些特殊字符串(来自functionlist变量),然后更改该字符串的特殊颜色.代码如下
for(String s:functionList)
{
final Pattern p = Pattern.compile(s);
final Matcher matcher = p.matcher(inputStr);
while(matcher.find())
{
//if(matcher.end() - matcher.start()== s.length())
inputStr.setSpan(new ForegroundColorSpan(Color.parseColor(highlightColor)),
matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
Run Code Online (Sandbox Code Playgroud)
我不使用Html.FromHtml方法的原因是; 它迫使我使用setText方法改变光标位置,因为我的edittext也从按钮(按钮调用settext)改变,不仅是软键盘,settext方法废弃了光标位置,因为按钮改变将光标位置设置为0即使它不是! !因此我不能在软键盘中间添加一些东西(当我尝试添加时,cursorposition总是设置为0).这就是为什么我必须使用spannable.
无论如何我的问题是,例如我的一个特殊文本是"日志"..当我输入日志它工作正常(日志),当附加空格字符日志(日志日志)它再次工作正常,但当我从第二次删除g日志,第一个日志颜色也消失了!(log lo)哪一定不应该发生.认为粗体日志是彩色的......
为什么会这样?
假设我有这样的代码;
public void insert(Student[] stus)
{
int count = 0;
for(Student s: stus)
{
s.setId( bla bla);
stus[count].setId(bla bla) // is this line needed?
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我从增强的for循环更改s上的任何内容,我是否也可以看到stus数组中的更改?循环复制的增强如何在参数或其他东西中起作用?
我正在尝试将All Spans应用于文本,如下所示;
public String getTextWithTags(Editable e)
{
StyleSpan[] ss = e.getSpans(0,e.length(),StyleSpan.class);
ss[0].getSpanStart <--- ? This is the problem, no such function
return "";
}
Run Code Online (Sandbox Code Playgroud)
但是没有索引查找功能来替换标签以将它们存储在数据库中,这样我可以在重新打开文本时检索所有跨度.如何从可编辑对象获得所有跨度位置?
我没有得到落实的点Comparable界面,因为我不能使用比较操作符<,<=,>=,和>在像C++语言的操作压倒一切的我的自定义类,比如我就可以; 我仍然需要compareTo直接调用该方法.
我可以编写自己的布尔方法,如isEqualor bigger,这与方法一样有用,如果不是更有用的话compareTo.
我错过了什么吗?实施它有什么意义?
为什么子序列(a,b).toString()比子串(a,b)更快?当我将所有子序列转换为子串时,它一直减慢到%7.为什么会这样?以下是我的代码;
private static String filterStr(String s)
{
for(int a = 0; a < s.length(); a++)
{
int c = s.charAt(a);
if(((c < 65) || ((c >90) &&(c < 97)) || (c > 122)))
{
if(c!=34 && c!=96 && c!=39)// t?rnak de?illerse
{
String temp = s.substring(0,a);
temp+= s.subSequence(a+1,s.length());
s = temp;
a--;
}
else
{
if(a !=0) // if not at the beginning
{
if(a == s.length()-1)
s = s.subSequence(0,s.length()-1).toString();
else
s = s.subSequence(0,s.length()-2).toString(); …Run Code Online (Sandbox Code Playgroud) Create PROCEDURE GETTABLENAME(@TableId nvarchar(10))
as
begin
declare @TableName nvarchar(150),
@SQLString nvarchar(4000)
SET @SQLString = N'select @TableName=sys.tables.name from sys.tables
where sys.tables.name like ''%[_]'+@TableId+'[_]%'' '
exec sp_executesql @SQLString,
N'@TableName nvarchar(150) output, @TableId nvarchar(10) '
,@TableId = @TableId
,@TableName = @TableName output
return @TableName
end
Run Code Online (Sandbox Code Playgroud)
当我打电话内(不存储过程),它完美的作品,因为我使用PRINT的@TableName,并得到我的结果.问题是当我调用这个存储过程时,它试图将结果转换为int而我不知道为什么?
Conversion failed when converting the nvarchar value 'E_GrupBilancoGelirTablosu_935_Form' to data type int
Run Code Online (Sandbox Code Playgroud) java ×5
android ×4
alternate ×1
arraycopy ×1
build ×1
comparable ×1
foreach ×1
spannable ×1
spanned ×1
spinner ×1
sql-server ×1
string ×1
subsequence ×1
substring ×1