没有ID的Android TextView setText

时间:2012-03-28 02:45:42

标签: android textview seekbar

我创建了一个xml页面,其中包含2个textviews和一个没有id的搜索栏。 CustomSeekBar类使用xml页面作为基本结构创建这些对象。 您可以在我的模拟器上查看textview的空间,但我很难确定设置文本。显然我遗漏了一些东西,因为CustomSeekBar类无法告诉我要为哪个textview设置文本。

如何在不为每个textview提供硬编码ID的情况下设置每个单独视图的文本? 我之所以没有硬编码ID,是因为如果每个文本视图都被命名,那么当需要更改一个textview的文本时,所有带有该ID的textview文本都不会改变吗? 我如何调用特定的textview ID,因为我的customseekbar类与活动有复合关系?

调用一切的活动。

public class ColorsActivity extends ListActivity {
/** Called when the activity is first created. */

//Array Adapter that will hold our ArrayList and display the items on the ListView
SeekBarAdaptor seekBarAdaptor;

//List that will  host our items and allow us to modify that array adapter
 ArrayList<CustomSeekBar> seekBarArrayList=null;
// TextView myValueText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.seekbarlist);

    //Initialize ListView        
    ListView lstTest= getListView();

     //Initialize our ArrayList
    seekBarArrayList = new ArrayList<CustomSeekBar>();

    //Initialize our array adapter 
    seekBarAdaptor = new SeekBarAdaptor(ColorsActivity.this, R.layout.seekbars, seekBarArrayList);

    CustomSeekBar red = new CustomSeekBar(this, "red", 1);
    //CustomSeekBar blue = new CustomSeekBar(this, "blue");
    //CustomSeekBar green = new CustomSeekBar(this, "green");

    //Set the above adapter as the adapter of choice for our list
    lstTest.setAdapter(seekBarAdaptor);

    seekBarArrayList.add(red);
    //seekBarArrayList.add(blue);
    //seekBarArrayList.add(green);

    Amarino.connect(this, "00:11:11:21:05:53");
}







}

CustomSeekBar类

public class CustomSeekBar implements SeekBar.OnSeekBarChangeListener {

Context myContext;
TextView myValue;
TextView myLabel;
SeekBar mySeekBar;

CustomSeekBar(Context context, String label, int ID){
    myContext = context;


    myValue = new TextView(myContext);
    mySeekBar = new SeekBar(myContext);

    myValue.setText(label);
    mySeekBar.setOnSeekBarChangeListener(this);

}

 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
    myValue.setText(progress);

    Amarino.sendDataToArduino(myContext, "00:11:11:21:05:53", 'A', progress);
 }
 public void onStopTrackingTouch(SeekBar seekBar){

 }
 public void onStartTrackingTouch (SeekBar seekBar){
 }


}

seekbarlist.xml保存我的自定义列表的列表视图

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <ListView
         android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

seekbars.xml是每个自定义列表项(CustomSeekBar)的结构

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBarLayout">
     <TextView
       android:gravity="center_horizontal"
       android:background="#aa0000"
       android:layout_width="wrap_content"
       android:layout_height="0dp"
       android:layout_weight="1"
      /> 

      <TextView
       android:gravity="center_horizontal"
       android:background="#aa0000"
       android:layout_width="wrap_content"
       android:layout_height="0dp"
       android:layout_weight="1"
       />


     <SeekBar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:max="255"/>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

为什么不必为它们命名相同的ID名称     @ + id / textview1和@ + id / textview2然后引用代码中的两个文本框我不明白是什么阻止了你?

答案 1 :(得分:0)

您可以使用ID作为@ bmporter12说。您可以拥有重复的ID,前提是Android有一个地方可以从您告知findViewById时开始查看。因此,在适配器的getView()中,您可以从seekbars.xml中提升新的row,然后执行row.findViewById(R.id.textView1)row.findViewById(R.id.textView2)

如果您需要从适配器外部进行设置,那么根据您获取信号来设置TextView的位置,您的CustomSeekBar可以要求Activity在适配器中的特定位置输入,也可以使用它在onClick回调中传递的View参数。