Android TextView setText без идентификатора - PullRequest
0 голосов
/ 28 марта 2012

Я создал страницу XML, которая содержит 2 текстовых просмотра и панель поиска без идентификаторов.Класс CustomSeekBar создает эти объекты, используя страницу XML в качестве базовой структуры.Вы можете видеть пространство для текстовых представлений на моем эмуляторе, но мне трудно разобраться, как установить текст.Очевидно, что я что-то упускаю, потому что у класса CustomSeekBar нет возможности определить, для какого текстового представления я хочу установить текст.

Как установить текст для каждого отдельного представления без предоставления каждого текстового представлениязашифрованный идентификатор?Причина, по которой я говорю без указания жестко идентифицированного идентификатора, заключается в том, что если имя каждого текстового представления названо, то когда текст одного текстового представления необходимо изменить, не изменится ли весь текст текстового представления с этим идентификатором?Как бы я назвал конкретный идентификатор текстового представления, поскольку мой класс 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 class

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 голосов
/ 03 апреля 2012

Вы можете использовать идентификаторы как @ bmporter12 сказал.У вас могут быть дубликаты идентификаторов, при условии, что в Android есть место, откуда можно начать поиск, когда вы сообщаете его findViewById.Таким образом, в вашем адаптере, в getView(), вы будете раздувать ваш новый row из seekbars.xml, а затем делать row.findViewById(R.id.textView1) и row.findViewById(R.id.textView2).

Если вам нужно установить его снаружи адаптера, то в зависимости от того, где вы получаете сигнал для установки TextView, либо ваш CustomSeekBar может запросить Activity для его входа в определенную позицию в адаптере, либоон может использовать параметр View, переданный в обратном вызове onClick.

0 голосов
/ 29 марта 2012

почему вы должны называть их одинаковыми именами, а не @ + id / textview1 и @ + id / textview2, а затем ссылаться на два текстовых поля в вашем коде. Я не понимаю, что вас останавливает?

...