2013-04-22 3 views
1

В моей деятельности я иду через кучу управления (полей ввода), и создатьfindViewById (R.id.something) в неактивности класса

for(ControlTemplate field: fieldMap.get(string)) 
{ 
    View view = field.getFieldControl(true, this); 
    l.addView(view, new PredicateLayout.LayoutParams(2, 0)); 
} 

getFieldControl В ControlTemplate содержит переключающий о том, что должны возвращать разные типы представлений.

case LABEL:      
     view = new TextView(context); 
     view.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
     ((TextView) view).setText(value); 
    break; 

Однако, я хотел бы иметь возможность создавать представления из определений XML, но это не представляется возможным, так как класс не активность, и поэтому она не имеет раскладки. То, что я хотел бы сделать что-то вроде этого:

case TEXTBOX: 
    view = (EditText) passedActivity.findViewById(R.id.edit_message); 
break; 

где passedActivity является деятельность, которая создала класс ControlField. Есть ли способ передать текущую деятельность в качестве аргумента или, возможно, только ее макеты?

+0

передать контекст конструктору класса неактивности и использовать его, чтобы найти идентификатор. – Raghunandan

+0

@ Raghunandan, в чем разница? – Blackbelt

+0

Я прошел контекст, но как мне получить идентификатор из контекста? – Rickard

ответ

7

Использование LayoutInflater для загрузки макета активов

LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

view = mInflater.inflate(R.layout.edit_message, parent, false); 

Для параметров Inflate см this

public View inflate (int resource, ViewGroup root, boolean attachToRoot) 

Параметры

resource 

идентификатор ресурс макета XML-загрузки (например, , R.layout.main_page)

root 

Опциональные быть родителем сгенерированной иерархии (если attachToRoot истинно), либо просто объект, который содержит набор значений для LayoutParams корня возвращенной иерархии (если attachToRoot ошибочно.)

attachToRoot 

Должна ли прикрепленная иерархия привязываться к параметру root? Если false, root используется только для создания правильного подкласса LayoutParams для корневого представления в XML.

+0

Кажется, что это может сработать! Что я должен передать в качестве родительского параментария? – Rickard

+0

передать контекст активности в конструктор класса non activity new NonActivityClass (ActivityName.this); затем используйте то же самое, чтобы раздуть макет и найти идентификатор требуемого вида. – Raghunandan

0

Если вы передаете контекст из своей активности в другой класс, вы можете ознакомиться с контекстом для всего, что вам нужно. Вы должны иметь возможность получать R из контекста, а также связанные представления.

0

Если я правильно понимаю вашу проблему, вам необходимо передать контекст вашей деятельности классу ControlTemplate.

Например Отправляю (текущий контекст).

adapter = new ChecklistBaseAdapter(this, checklistitems); 

при вызове моего базового адаптера класса

public ChecklistBaseAdapter(Context context, ArrayList<Checklist> results) 

тогда я могу ссылаться, чтобы изменить контроль над текущей деятельностью с моим классом ChecklistBaseAdapter.

Надеюсь, это поможет

Смежные вопросы