Динамическое изменение макета - PullRequest
5 голосов
/ 16 июня 2011

Я пытаюсь создать активность для поиска, и у меня есть 2 разных макета с разными критериями поиска для каждого. Я хотел бы использовать спиннер, чтобы сделать это. На самом деле никакого кода нет, потому что то, что я уже пробовал, я удалил, но любая помощь приветствуется.

1 Ответ

8 голосов
/ 16 июня 2011

Вы можете переключить весь контентный вид деятельности на новый ресурс вида или макета в вашем onItemSelected обратном вызове, используя Activity.setContentView(), но я ожидаю, что это не совсем то, что вы хотите, как это было бызамените сам счетчик.

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

Например:

main.xml:

<LinearLayout ...> <!-- Root element -->
    <!-- Put your spinner etc here -->
    <FrameLayout android:layout_height="fill_parent"
                 android:layout_width="fill_parent"
                 android:id="@+id/search_criteria_area" />
</LinearLayout>

search1.xml:

<!-- Contents for first criteria -->
<LinearLayout ...>
    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:background="#ffff0000"
              android:id="@+id/search_content_text" />
</LinearLayout>

search2.xml:

<!-- Contents for second criteria -->
<LinearLayout ...>
    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:background="#ff00ff00"
              android:id="@+id/search_content_text" />
</LinearLayout>

Тогда в своей деятельности вы можете переключаться междуим нравится так:

public class SearchActivity extends Activity {

    // Keep track of the child view with the search criteria.
    View searchView;

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        ViewGroup searchViewHolder = (ViewGroup)findViewById(R.id.search_criteria_area);

        if (searchView != null) {
            searchViewHolder.removeView(searchView);
        }

        int searchViewResId;

        switch(position) {
        case 0:
            searchViewResId = R.layout.search1;
            break;
        case 1:
            searchViewResId = R.layout.search2;
            break;
        default:
            // Do something sensible
        }

        searchView = getLayoutInflater().inflate(searchViewResId, null);
        searchViewHolder.addView(searchView);

        TextView searchTextView = (TextView)searchView.findViewById(R.id.search_content_text);
        searchTextView.setText("Boosh!");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...