blob: 64f280aa79c2ee6efd2cee04812b8669dfafe952 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Neal Nguyen1d3165f2010-01-12 13:26:10 -080017package android.widget.listview;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080018
19import android.app.Activity;
20import android.os.Bundle;
21import android.view.View;
22import android.view.ViewGroup;
23import android.widget.ArrayAdapter;
24import android.widget.ListView;
25
Neal Nguyen1d3165f2010-01-12 13:26:10 -080026import com.android.frameworks.coretests.R;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080027
28public class ListViewHeight extends Activity {
29
30 private View mButton1;
31 private View mButton2;
32 private View mButton3;
33
34 private View mOuterLayout;
35 private ListView mInnerList;
36
37 ArrayAdapter<String> mAdapter;
38 private String[] mStrings = {
39 "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi" };
40
41 @Override
42 protected void onCreate(Bundle savedInstanceState) {
43 super.onCreate(savedInstanceState);
44
45 setContentView(R.layout.linear_layout_listview_height);
46
47 mButton1 = findViewById(R.id.button1);
48 mButton2 = findViewById(R.id.button2);
49 mButton3 = findViewById(R.id.button3);
50
51 mOuterLayout = findViewById(R.id.layout);
52 mInnerList = (ListView)findViewById(R.id.inner_list);
53
54 mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,
55 mStrings);
56
57 // Clicking this button will show the list view and set it to a fixed height
58 // If you then hide the views, there is no problem.
59 mButton1.setOnClickListener(new View.OnClickListener() {
60 public void onClick(View v) {
61 // set listview to fixed height
62 ViewGroup.MarginLayoutParams lp;
63 lp = (ViewGroup.MarginLayoutParams) mInnerList.getLayoutParams();
64 lp.height = 200;
65 mInnerList.setLayoutParams(lp);
66 // enable list adapter
67 mInnerList.setAdapter(mAdapter);
68 // and show it
69 mOuterLayout.setVisibility(View.VISIBLE);
70 }
71 });
72
Romain Guy980a9382010-01-08 15:06:28 -080073 // Clicking this button will show the list view and set it match_parent height
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080074 // If you then hide the views, there is an NPE when calculating the ListView height.
75 mButton2.setOnClickListener(new View.OnClickListener() {
76 public void onClick(View v) {
77 // set listview to fill screen
78 ViewGroup.MarginLayoutParams lp;
79 lp = (ViewGroup.MarginLayoutParams) mInnerList.getLayoutParams();
Romain Guy980a9382010-01-08 15:06:28 -080080 lp.height = lp.MATCH_PARENT;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080081 mInnerList.setLayoutParams(lp);
82 // enable list adapter
83 mInnerList.setAdapter(mAdapter);
84 // and show it
85 mOuterLayout.setVisibility(View.VISIBLE);
86 }
87 });
88
89 // Clicking this button will remove the list adapter and hide the outer enclosing view.
90 // We have to climb all the way to the top because the bug (not checking visibility)
91 // only occurs at the very outer loop of ViewRoot.performTraversals and in the case of
92 // an Activity, this means you have to crawl all the way out to the root view.
93 // In the search manager, it's sufficient to simply show/hide the outer search manager
94 // view to trigger the same bug.
95 mButton3.setOnClickListener(new View.OnClickListener() {
96 public void onClick(View v) {
97 mInnerList.setAdapter(null);
98 // hide listview's owner
99 // as it turns out, the owner doesn't take us high enough
100 // because our activity includes a title bar, thus another layer
101 View parent = (View) mOuterLayout.getParent(); // FrameLayout (app container)
102 View grandpa = (View) parent.getParent(); // LinearLayout (title+app)
103 View great = (View) grandpa.getParent(); // PhoneWindow.DecorView
104 great.setVisibility(View.GONE);
105 }
106 });
107 }
108
109}