我需要 SpannableStrings 还是应该选择其他解决方案?
Do I need SpannableStrings or should I choose another solution?
我从数据库中获取的数据创建了一个 ListView。
@Override
public void mostCommonResults(String array) {
results=array;
pieces=results.split(";");
sorted=new String[pieces.length/2];
int firstNumber=0;
int secondNumber=1;
for(int i=0;i<sorted.length;i++){
sorted[i]=pieces[firstNumber]+" "+pieces[secondNumber]+" occurence";
firstNumber+=2;
secondNumber+=2;
}
list= (ListView) findViewById(R.id.list);
adapter=new ArrayAdapter<String>(ThirdActivity.this,R.layout.list_items,R.id.list_elements,sorted);
list.setAdapter(adapter);
}
结果:enter image description here
然后我为 ListView 设置了 OnItemClickListener,所以当用户点击指定的项目时,我想像第二张图片一样将它提供给 TextView。
enter image description here
我将数据作为 SpannableString 提供给电视
if(selectedNumbers.getText().toString()=="Selected Numbers"){
pieces=0;
//position=which item has clicked
String temp=sorted[position].substring(0,2);
//if the number has only 1 digit
if(temp.substring(1,2).equals(" ")){
selectedNumbers.setText(temp.substring(0,1));
pieces++;
}
//if the number has 2 digits
else{
SpannableString ss = new SpannableString(temp);
//SpannableString array...Is it necessary?
selected[pieces]=ss;
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
};
selected[pieces].setSpan(clickableSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
selectedNumbers.setText(selected[pieces]);
selectedNumbers.setMovementMethod(LinkMovementMethod.getInstance());
selectedNumbers.setHighlightColor(Color.TRANSPARENT);
pieces++;
}
selectedTextView.setEnabled(false);
selectedTextView.setOnClickListener(null);
}
我不知道当用户单击 TextView 指定部分时我该怎么做,只删除该部分(SpannableString)并保留其他部分,此外为该 ListView 元素设置回 OnClickListener,其编号被删除用户。
这将允许用户改变 his/her 最终想要在电视上播放的 6 个号码 he/her。
list_items.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView style="@style/TextDesign"
android:id="@+id/list_elements"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
太棒了!为了您的利益,我会 post 回答! :)
对于 ListView 布局,您可以使用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools"
android:layout_marginTop="@dimen/activity_vertical_margin_narrow">
<TextView
android:id="@+id/left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
在列表视图的 OnClicklistener 中,您可以像这样获取 TextView
TextView leftTextView = (TextView) view.findViewById(R.id.left);
只需执行此操作即可将其添加到标题中的 TextView
String text = headingTextView.getText();
headingTextView.setText(text+leftTextView.toString());
我没有测试这些功能,但希望您能理解!快乐编码:)
我从数据库中获取的数据创建了一个 ListView。
@Override
public void mostCommonResults(String array) {
results=array;
pieces=results.split(";");
sorted=new String[pieces.length/2];
int firstNumber=0;
int secondNumber=1;
for(int i=0;i<sorted.length;i++){
sorted[i]=pieces[firstNumber]+" "+pieces[secondNumber]+" occurence";
firstNumber+=2;
secondNumber+=2;
}
list= (ListView) findViewById(R.id.list);
adapter=new ArrayAdapter<String>(ThirdActivity.this,R.layout.list_items,R.id.list_elements,sorted);
list.setAdapter(adapter);
}
结果:enter image description here
然后我为 ListView 设置了 OnItemClickListener,所以当用户点击指定的项目时,我想像第二张图片一样将它提供给 TextView。
enter image description here
我将数据作为 SpannableString 提供给电视
if(selectedNumbers.getText().toString()=="Selected Numbers"){
pieces=0;
//position=which item has clicked
String temp=sorted[position].substring(0,2);
//if the number has only 1 digit
if(temp.substring(1,2).equals(" ")){
selectedNumbers.setText(temp.substring(0,1));
pieces++;
}
//if the number has 2 digits
else{
SpannableString ss = new SpannableString(temp);
//SpannableString array...Is it necessary?
selected[pieces]=ss;
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
};
selected[pieces].setSpan(clickableSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
selectedNumbers.setText(selected[pieces]);
selectedNumbers.setMovementMethod(LinkMovementMethod.getInstance());
selectedNumbers.setHighlightColor(Color.TRANSPARENT);
pieces++;
}
selectedTextView.setEnabled(false);
selectedTextView.setOnClickListener(null);
}
我不知道当用户单击 TextView 指定部分时我该怎么做,只删除该部分(SpannableString)并保留其他部分,此外为该 ListView 元素设置回 OnClickListener,其编号被删除用户。 这将允许用户改变 his/her 最终想要在电视上播放的 6 个号码 he/her。
list_items.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView style="@style/TextDesign"
android:id="@+id/list_elements"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
太棒了!为了您的利益,我会 post 回答! :) 对于 ListView 布局,您可以使用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools"
android:layout_marginTop="@dimen/activity_vertical_margin_narrow">
<TextView
android:id="@+id/left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
在列表视图的 OnClicklistener 中,您可以像这样获取 TextView
TextView leftTextView = (TextView) view.findViewById(R.id.left);
只需执行此操作即可将其添加到标题中的 TextView
String text = headingTextView.getText();
headingTextView.setText(text+leftTextView.toString());
我没有测试这些功能,但希望您能理解!快乐编码:)