Один вид деятельности, много контента - PullRequest
2 голосов
/ 28 марта 2012

Я использую объекты (бины), которые мы будем называть Категория. Эти объекты Category содержат набор атрибутов, включая список объектов Category.

public class Category {
     private List<Category> categoryList;
     ...
     private Strings anAttribute;
}

При компиляции я не знаю глубины корневого объекта Category, то есть: сколько Category находится в списке корневой Category и сколько объектов Category есть в каждом из списка и так далее. Я на самом деле получаю корневой объект Category, анализируя XML-файл.

У меня есть действие, которое, для возобновления, показывает набор кнопок. Каждая кнопка представляет корневой объект Category (каждый из файла XML). Мне бы хотелось, чтобы после нажатия на одну из этих кнопок я получал новое «окно», отображающее набор кнопок (кнопка для каждой категории в списке), и каждая из этих кнопок рекурсивно отображала новое «окно», отображающее набор кнопки ...

Как я мог сделать это, зная, что я хотел бы использовать файлы XML для содержимого, которое я хочу отобразить? Я предполагаю, что смысл не в том, чтобы создать действие для каждой категории (даже динамически).

Спасибо за вашу помощь.

1 Ответ

3 голосов
/ 28 марта 2012

Вы можете использовать следующую структуру:

private LinearLayout myLayout;

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.something);

    myLayout = (LinearLayout) findViewById(R.id.my_layout);
    createBtns( loadFirstCategory() );
}

private void createBtns(Category c)
{
    List<Category> c_list = c.getCategoryList();
    for (int i=0; i<c_list.size(); i++)
    {
        Button btn = new Button(this);
        btn.setText( c_list.get(i).getName() );
        myLayout.addView(btn);

        btn.setOnClickListener(new OnClickListener() {
            public void onClick()
            {
                myLayout.removeAll();
                createBtns( c_list.get(i) );
            }
        });
    }
}
...