String data="tv";
同样在我的xml文件中,我有一个名为tv1的TextView。 我已经在Activity中输入了textView。
TextView tv1 = (TextView) findViewById(R.id.tv1);
我想将字符串转换为TextView ...
这样我就可以在tv1上对字符串执行此操作。
data.setText("abc"); // on the string..
我可以实现或不实现。还有如何动态地为textView分配id。 Thanx ...
这是我的活动代码:
public class Winnings extends Activity {
TextView tv1, tv2, tv3, tv4, tv5, tv6, tv7, tv8, tv9, tv10, tv11, tv12,
tv13, tv14, tv15;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.winnings);
setupVariables();
// TODO Auto-generated method stub
backGroundToChange(7);
}
private void setupVariables() {
// TODO Auto-generated method stub
tv1 = (TextView) findViewById(R.id.TextView01);
tv2 = (TextView) findViewById(R.id.TextView02);
tv3 = (TextView) findViewById(R.id.TextView03);
tv4 = (TextView) findViewById(R.id.TextView04);
tv5 = (TextView) findViewById(R.id.TextView05);
tv6 = (TextView) findViewById(R.id.TextView06);
tv7 = (TextView) findViewById(R.id.TextView07);
tv8 = (TextView) findViewById(R.id.TextView08);
tv9 = (TextView) findViewById(R.id.TextView09);
tv10 = (TextView) findViewById(R.id.TextView10);
tv11 = (TextView) findViewById(R.id.TextView11);
tv12 = (TextView) findViewById(R.id.TextView12);
tv13 = (TextView) findViewById(R.id.TextView13);
tv14 = (TextView) findViewById(R.id.TextView14);
tv15 = (TextView) findViewById(R.id.TextView15);
}
void backGroundToChange(int position) {
//What i want to do is this..
String data = "tv" + position;
//The casting of string into a TextView and so that I can perform this...
data.setBackgroundResource(R.drawable.option_correct);
// so by this way i don't need the switch and case that was actually used, shown below.....
//We normally implement it this way
/*
switch (position) {
case 1:
tv1.setBackgroundResource(R.drawable.option_correct);
break;
case 2:
tv2.setBackgroundResource(R.drawable.option_correct);
break;
case 3:
tv3.setBackgroundResource(R.drawable.option_correct);
break;
case 4:
tv4.setBackgroundResource(R.drawable.option_correct);
break;
case 5:
tv5.setBackgroundResource(R.drawable.option_correct);
break;
case 6:
tv6.setBackgroundResource(R.drawable.option_correct);
break;
case 7:
tv7.setBackgroundResource(R.drawable.option_correct);
break;
case 8:
tv8.setBackgroundResource(R.drawable.option_correct);
break;
case 9:
tv9.setBackgroundResource(R.drawable.option_correct);
break;
case 10:
tv10.setBackgroundResource(R.drawable.option_correct);
break;
case 11:
tv11.setBackgroundResource(R.drawable.option_correct);
break;
case 12:
tv12.setBackgroundResource(R.drawable.option_correct);
break;
case 13:
tv13.setBackgroundResource(R.drawable.option_correct);
break;
case 14:
tv14.setBackgroundResource(R.drawable.option_correct);
break;
case 15:
tv15.setBackgroundResource(R.drawable.option_correct);
break;
default:
break;
}
*/
}
xml代码......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/TextView15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="5 Crore"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#D4A017"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="1 Crore"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="50 Lakhs"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="25 Lakhs"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="12,50,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="6,40,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#D4A017"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView09"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="3,20,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView08"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="1,60,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView07"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="80,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView06"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="40,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="20,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#D4A017"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="10,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="5,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="2,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/option_bar"
android:gravity="center"
android:text="1,000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffff"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
使用的图片......
答案 0 :(得分:4)
您无法将String
“投射”到TextView
,因此我假设您真正想要问的是如何基于其找到View
name(不是其整数ID)。我有一个String
,其中包含TextView
的命名标识符。
通常你需要使用Java反射来做这样的事情,但Android通过使用getIdentifier()
提供了另一种解决方案。此方法接受一个字符串并返回一个资源ID(int),允许您按名称使用资源。尝试这样的事情:
private void backGroundToChange(int position) {
String resourceName = "TextView" + position;
int resourceID = getResources().getIdentifier(resourceName, "id",
getPackageName());
if (resourceID != 0) {
TextView tv = (TextView) findViewById(resourceID);
if (tv != null) {
// Take action on TextView tv here...
tv.setBackgroundResource(R.drawable.option_correct);
}
}
}
第3行中的“id”表示您正在查看R.id.*
常量的名称。您可以使用相同的技术按名称查找其他类型的资源(例如,Drawable
s)。在这种情况下,您可以将“id”替换为“drawable”,并提供您R.drawable.*
资源之一的名称。
最后,请注意Android文档中的警告:
注意:不建议使用此功能。按标识符检索资源比按名称检索资源要高效。
以上代码根本不是很有效,因为您正在调用 {/ strong> getIdentifier()
和findViewById()
,两者都不是相对便宜的操作。有关更好的解决方案,请参阅my follow-up answer。
答案 1 :(得分:3)
为什么要将TextView分配给String?为了方便起见,你可以利用多态(即将父[View]转换为子[TextView,Button等]),因此你不必编写findTextViewById()
, findButtonById()
等等。
在String上运行.setData()是没有意义的,但是如果你真的想要,你可以继承String,并添加该方法,并在其中更新String的内部值。
而且,在您的XML中,您可以说:
<TextView id="@+id/new_id" />
将在运行时为其生成一个id。
编辑:由于您只是更新TextView的背景,而TextView只是一个整数,您可以这样做:
public void updateBg( TextView aView )
{
aView.setBackgroundResource( R.drawable.option_correct );
}
// usage, assuming tv1 is already pointing to a TextView
upodateBg( tv1 );
编辑2:
private ArrayList<TextView> views = new ArrayList<TextView>();
//populate
views.add( (TextView)findViewById(R.id.whatever) );
//
public void updateView( int index )
{
(TextView)views.get(index).setBackgroundResource();
}
//usage
updateView( 7 );
编辑3:或者,您只需存储ID:
private static final int[] tvIds = { R.id.tv1, ... };
public void updateBg( int index )
{
((TextView)findViewById( tvIds[index] )).setBackground(...);
}
答案 2 :(得分:3)
我要离开我的第一个答案了,因为它仍然回答了原来的问题,但我不认为这是解决问题的最好方法,因为你已经改写了。
根据您更新的问题,您真正应该做的是将TextView
放入数组或某种Collection
中,以便稍后按位置访问它们。即使findViewById()
是一项相对昂贵的操作,因此您应该尽量减少对它的使用。考虑这样的事情:
List<TextView> tv = new ArrayList<TextView>();
tv.add((TextView) findViewById(R.id.TextView01));
tv.add((TextView) findViewById(R.id.TextView02));
tv.add((TextView) findViewById(R.id.TextView03));
// This will get TextView02
// Remember Collections are indexed from zero
tv.get(1);
答案 3 :(得分:0)
也许用这种方法可以为你效劳。这是以编程方式在TextView中表示String文本的方法
mTextViewOutput.append(outputString);
答案 4 :(得分:0)
TextView类中有一个setText()方法。您需要做的就是这样调用它:
mMyTextViewObject.setText("some text");