Использование класса для настройки представления в Android - PullRequest
0 голосов
/ 20 апреля 2011

Я пишу приложение для Android, где пользователь может добавлять и удалять поля в интерактивном режиме. Каждое поле, добавляемое пользователем, имеет несколько кнопок и значение, с которым пользователь должен иметь возможность взаимодействовать. Я подумал о создании подкласса для обработки поля, которое я могу добавить, который будет содержать собственный onClickListener, но я не уверен, как это сделать.

Вот некоторый псевдокод, который должен прояснить мое намерение.

Скажите, у меня есть класс, vClass:

    public class sClass extends View implements onClickListener{
   this.setContextView(R.layout.vClass);//how do I do this in a correct way?
       @Override 
       public void onClick(View v){ //add code here
       }
    }

и aClass, который является основным классом приложения.

public class aClass extends Activity implements onClickListener{
   Button b;
   LayoutInflater i;
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      this.b =(Button)this.findViewById(R.id.btn);
      b.setOnClickLister(this);

   }
   @Override
   public void onClick(View v){
      //this is what I have now to add View
      final LinearLayout canvas =(LinearLayout)aClass.this.findViewById(R.id.main);
      View cv =this.inflater.inflate(R.layout.counter, canvas, false);
      canvas.addView(cv);
   }
}

как я могу использовать vClass для добавления элементов в aClass.

Набрав это, я подумал о другом решении.

Если я буду отслеживать идентификаторы всех добавленных представлений (без подкомпонентов), могу ли я сделать что-то подобное:

View vv = findViewById(id);
Button bb = vv.findViewByIf(R.id.xmlId);

где id - это идентификатор, который я назначил для представления, которое я знаю, а xmlId - это строка, которую я указал в файле xml?

Спасибо

Yotam

Для решения прочитайте обсуждение ниже

1 Ответ

1 голос
/ 20 апреля 2011

идентификаторы, используемые в макетах, не обязательно являются уникальными, поэтому я думаю, вы должны сохранить добавленные Views в ArrayList, как

View cv =this.inflater.inflate(R.layout.counter, canvas, false);
this.viewList.add(cv);
canvas.addView(cv);

, или вы можете объявить элемент индекса внутри вашего sClass реализации и сохраните добавленные индексы в ArrayList:

private int index;

public sClass(final int index) 
{
    this.index = index;
}

public int getIndex()
{
    return this.index;
}

@override
public boolean equals(Object obj)
{
    return ((obj instanceof sClass) && (((sClass)obj).getIndex() == this.index));
}

В обоих случаях у вас есть доступ к нужному представлению.

Кнопка, которая находится внутри представления, доступна с помощью метода findViewById()

Button bb = vv.findViewById(R.id.buttonId);

, где R.id.buttonId был объявлен в XML-файле макета представления vv следующим образом:

<Button android:id="@+id/buttonId" [...] />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...