如何在粘性 'header' 和 Android 中的列表视图之间放置一个按钮
How to put a button in between a sticky 'header' and a Listview in Android
我的目标是有一个粘性 header、一个清除按钮,然后是一个 ListView(按此顺序)。
+-----------------+
| Header | (Sticky)
+-----------------+
| "Clear" button | (NOT sticky)
+-----------------+
| ListView | (Also NOT sticky)
| |
| |
| |
| |
| |
| |
+-----------------+
下面的方法几乎 可以满足我的要求。 header 是粘性的,ListView 功能正常。但是按钮是粘性的(它在粘性 header 的正下方标记)。
<RelativeLayout>
<!-- Used for Sticky Header -->
<RelativeLayout
android:id="@+id/top_control_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize">
<Button/>
<TextView/>
</RelativeLayout> <!-- End XML for sticky hader -->
<!-- Button to clear bookmarks -->
<Button
android:id="@+id/clearButton"
android:text="CLEAR"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@+id/top_control_bar"
android:onClick="clearBookmarks"/>
<!-- ListView for displaying questions -->
<ListView
android:id="@+id/listViewBrowse"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/clearButton" >
</ListView>
</RelativeLayout>
我想我需要停止使用这个 属性
android:layout_below="@+id/top_control_bar"
用于 "clear" 按钮。但如果我只是摆脱它,它就不起作用(如果我这样做,按钮会覆盖 header )。我应该调整什么?或者我应该尝试什么而不是这种方法?
* **解决方案 ***
按照这些步骤解决了我的问题:
- 创建一个新的布局文件:non_sticky_header.xml(其中包含我的清除按钮)。
- 从主布局中删除清除按钮。
- 通过扩充我的 'non_sticky_header' 资源文件动态创建视图 object。此视图 object 是 header.
- 使用 addHeaderView() 将 header object 添加到我的 ListView。
第 3 步和第 4 步的代码:
View header = getLayoutInflater().inflate(R.layout.non_sticky_header, null);
list.addHeaderView(header);
来源
-请参阅@nDroidDev 对此 post 的第三个答案;我的解决方案与步骤 3 和 4 略有不同。
-(参见 this S.O. Post about using addHeaderView(),它解释了步骤 3 和 4(来自@user370305)。
我同意@Manish。假设按钮是列表的第一项(位置 = 0)。
你可以用上面的代码处理它的动作:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == 0) {
clearAllListMethod();
}
}
});
您还可以轻松地在适配器中设置其可见性。
希望对你有帮助。
我认为,而不是将清除按钮添加到 Realtive 布局中,您应该像这样将其添加到列表视图的 header 中..
1) 创建一个新的布局文件说 non_sticky_header.xml 并添加以下行..
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Button to clear bookmarks -->
<Button
android:id="@+id/clearButton"
android:text="CLEAR"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@+id/top_control_bar"
android:onClick="clearBookmarks"/>
</RelativeLayout>
2) 现在从您的主布局中删除此清除按钮并像这样更新它...
只需在主布局中保留 stick headre 和 listview 即可。
<RelativeLayout>
<!-- Used for Sticky Header -->
<RelativeLayout
android:id="@+id/top_control_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize">
<Button/>
<TextView/>
</RelativeLayout> <!-- End XML for sticky hader -->
<!-- ListView for displaying questions -->
<ListView
android:id="@+id/listViewBrowse"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/clearButton" >
</ListView>
</RelativeLayout>
3) 最后,将 non_sticky_header.xml 添加为 java 文件中列表的 header,像这样...
//code to add header and footer to listview
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.non_sticky_header, listView, false);
listView.addHeaderView(header, null, false);
希望对您有所帮助...:)
将 Button
添加为 ListView
的 header。
喜欢:
Button headerButton = (Button) getLayoutInflater().inflate(R.layout.header_button, null);
mListView.addHeader(headerButton);
但在添加适配器之前添加header。
我的目标是有一个粘性 header、一个清除按钮,然后是一个 ListView(按此顺序)。
+-----------------+
| Header | (Sticky)
+-----------------+
| "Clear" button | (NOT sticky)
+-----------------+
| ListView | (Also NOT sticky)
| |
| |
| |
| |
| |
| |
+-----------------+
下面的方法几乎 可以满足我的要求。 header 是粘性的,ListView 功能正常。但是按钮是粘性的(它在粘性 header 的正下方标记)。
<RelativeLayout>
<!-- Used for Sticky Header -->
<RelativeLayout
android:id="@+id/top_control_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize">
<Button/>
<TextView/>
</RelativeLayout> <!-- End XML for sticky hader -->
<!-- Button to clear bookmarks -->
<Button
android:id="@+id/clearButton"
android:text="CLEAR"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@+id/top_control_bar"
android:onClick="clearBookmarks"/>
<!-- ListView for displaying questions -->
<ListView
android:id="@+id/listViewBrowse"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/clearButton" >
</ListView>
</RelativeLayout>
我想我需要停止使用这个 属性
android:layout_below="@+id/top_control_bar"
用于 "clear" 按钮。但如果我只是摆脱它,它就不起作用(如果我这样做,按钮会覆盖 header )。我应该调整什么?或者我应该尝试什么而不是这种方法?
* **解决方案 ***
按照这些步骤解决了我的问题:
- 创建一个新的布局文件:non_sticky_header.xml(其中包含我的清除按钮)。
- 从主布局中删除清除按钮。
- 通过扩充我的 'non_sticky_header' 资源文件动态创建视图 object。此视图 object 是 header.
- 使用 addHeaderView() 将 header object 添加到我的 ListView。
第 3 步和第 4 步的代码:
View header = getLayoutInflater().inflate(R.layout.non_sticky_header, null);
list.addHeaderView(header);
来源
-请参阅@nDroidDev 对此 post 的第三个答案;我的解决方案与步骤 3 和 4 略有不同。
-(参见 this S.O. Post about using addHeaderView(),它解释了步骤 3 和 4(来自@user370305)。
我同意@Manish。假设按钮是列表的第一项(位置 = 0)。 你可以用上面的代码处理它的动作:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == 0) {
clearAllListMethod();
}
}
});
您还可以轻松地在适配器中设置其可见性。 希望对你有帮助。
我认为,而不是将清除按钮添加到 Realtive 布局中,您应该像这样将其添加到列表视图的 header 中..
1) 创建一个新的布局文件说 non_sticky_header.xml 并添加以下行..
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Button to clear bookmarks -->
<Button
android:id="@+id/clearButton"
android:text="CLEAR"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@+id/top_control_bar"
android:onClick="clearBookmarks"/>
</RelativeLayout>
2) 现在从您的主布局中删除此清除按钮并像这样更新它... 只需在主布局中保留 stick headre 和 listview 即可。
<RelativeLayout>
<!-- Used for Sticky Header -->
<RelativeLayout
android:id="@+id/top_control_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize">
<Button/>
<TextView/>
</RelativeLayout> <!-- End XML for sticky hader -->
<!-- ListView for displaying questions -->
<ListView
android:id="@+id/listViewBrowse"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/clearButton" >
</ListView>
</RelativeLayout>
3) 最后,将 non_sticky_header.xml 添加为 java 文件中列表的 header,像这样...
//code to add header and footer to listview
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.non_sticky_header, listView, false);
listView.addHeaderView(header, null, false);
希望对您有所帮助...:)
将 Button
添加为 ListView
的 header。
喜欢:
Button headerButton = (Button) getLayoutInflater().inflate(R.layout.header_button, null);
mListView.addHeader(headerButton);
但在添加适配器之前添加header。