当我创建一个只有ListView的简单布局时,在最后一项之后没有显示分隔符,这看起来有点难看.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

但是,如果我在列表视图下添加另一个视图并设置listview的属性,我发现在最后一个项目后面会显示一个分隔符android:layout_above.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@android:color/holo_blue_dark"
android:text="Bottom" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

为什么listview的行为如此?如何在仅包含列表视图的布局中的最后一项之后获取分隔符?
我一直在寻找创建风格不同的列表视图,就像许多其他人一样,我开始寻求扩展AbsListView.根据Android文档,AbsListView是:
可用于实现项目虚拟化列表的基类.列表在此处没有空间定义.例如,此类的子类可以在网格中,在轮播中,作为堆栈等显示列表的内容.
ListView控件执行的一些努力和审查后,它看起来像它可能无法延长AbsListView ListView控件的方式做,因为这两类连接器和无法访问某些包装成员.我偶然发现了这个形式的罗曼盖伊:
AbsListView和AbsSpinner旨在在框架内进行扩展.它们也可以在第三方应用程序中扩展,但我们没有故意公开所有必要的受保护字段和方法.我们希望在如何公开此类API时要非常小心,以免获得未来扩展和内部更改的内容.我们目前的建议是,您只需在应用内复制/粘贴所需的代码即可.
我开始尝试这样做,但是复制AbsListView变成了一个复制其他东西的兔子洞,它实际上似乎是一个失败的主张.我想看看是否有人成功扩展了可以共享方法的AbsListView.
[1] http://developer.android.com/reference/android/widget/AbsListView.html
[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0
我列出了按月和年分开的活动清单(2010年6月,2010年7月等)
我想启用快速滚动,因为列表非常长.
如何ListViews在Android中启用快速滚动?
我正在使用数组适配器,并且这是添加字符串s的数组列表,列表是多选,如何获取列表项的值被点击?
my_contacts_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice,conts_list);
my_contacts_list.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
我试图这样做,
SparseBooleanArray positions = my_contacts_list.getCheckedItemPositions();
int size=positions.size();
int i=0;
while(i <= size){
conts_list.get(positions.get(i));
i++;
}
Run Code Online (Sandbox Code Playgroud)
但是position.get(i)是一个数组列表,那么如何检索所选项呢?
在我的应用程序中,我得到了一个活动,顶部有一些动作栏,下面是列表视图.我想要做的是 - 用列表向上滚动它,所以它隐藏然后,当列表向下滚动时 - 它应该向下滚动列表,就像它刚好在屏幕上边框上.我该如何实现这一功能?
android scroll vertical-scrolling android-listview android-actionbar
我只有一个活动是ListActivity.基本上我使用以下代码剪切来"激活"CAB:
ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
// Here you can do something when items are selected/de-selected,
// such as update the title in the CAB
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Respond to clicks on the actions in the CAB
switch (item.getItemId()) {
case R.id.menu_delete:
deleteSelectedItems();
mode.finish(); // Action picked, so close the CAB
return true; …Run Code Online (Sandbox Code Playgroud) android android-layout android-listview android-linearlayout
以下用于设置自定义字体的代码会降低整个应用程序的速度.我如何修改它以避免内存泄漏,提高速度和管理内存?
public class FontTextView extends TextView {
private static final String TAG = "FontTextView";
public FontTextView(Context context) {
super(context);
}
public FontTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setCustomFont(context, attrs);
}
public FontTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.FontTextView);
String customFont = a.getString(R.styleable.FontTextView_customFont);
setCustomFont(ctx, customFont);
a.recycle();
}
public boolean setCustomFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = …Run Code Online (Sandbox Code Playgroud) android android-emulator android-intent android-layout android-listview
当我尝试在以下内容中扩充布局时发生以下错误ListView:
requestLayout() improperly called by android.widget.TextView{...} during layout: running second layout pass
Run Code Online (Sandbox Code Playgroud)
我试图在一个内部膨胀布局ListView如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) musicActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);
...
}else{...}
}
Run Code Online (Sandbox Code Playgroud)
膨胀的布局可以看起来像下面这样简单,并且仍然会产生错误
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/txt_size"/>
Run Code Online (Sandbox Code Playgroud)
我已经研究了类似的问题,找不到任何解决方案似乎工作问题1,问题2,问题3.
有谁知道导致此类错误的原因是什么?任何疑难解答建议 对于更多上下文,它ListView显示在a Fragment内ViewPager
这是完整的XML布局(减去一堆属性),仍然会导致问题
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView …Run Code Online (Sandbox Code Playgroud) 我在ListView API上闲逛, 我看到了方法:
addHeaderView(查看v)
我想要做的是在列表上方有一个布局,这可能吗?
我尝试过这样的事情:
EditText et=new EditText(this);
et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
et.setInputType(InputType.TYPE_CLASS_TEXT);
addHeaderView(et); //makes app crash
Run Code Online (Sandbox Code Playgroud)
我也试过了
setContentView(R.layout.tryview);
Run Code Online (Sandbox Code Playgroud)
但它也使应用程序崩溃.
非常感谢帮助!
编辑:此类的代码是:
public class GroupsActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String your_array_contents[] = {"a","ab","c"};
setListAdapter(new ArrayAdapter<String>(this, R.layout.groups_layout, your_array_contents));
EditText et=new EditText(this);
et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
et.setInputType(InputType.TYPE_CLASS_TEXT);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this,
android.R.layout.simple_list_item_multiple_choice, your_array_contents));
lv.addHeaderView(et); //makes app crash
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) …Run Code Online (Sandbox Code Playgroud) 我有一个ListView子类,我允许在上下文操作栏(CAB)处于活动状态时进行选择.CAB被设置为onItemLongClick事件的回调:
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(context_menu, menu);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这很好,ListView按预期工作,当前选定的项目在触摸时保持突出显示.
当我关闭CAB时,我希望ListView恢复正常(即触摸模式).问题是最后选择的项目会无限期地突出显示,无论我尝试清除它的方法是什么:
public void onDestroyActionMode(ActionMode mode) {
//Unselect any rows
ListView lv = getListView();
lv.clearChoices(); // Has no effect
lv.setChoiceMode(ListView.CHOICE_MODE_NONE); // Has no effect on the highlighted item
lv.setFocusable(false); // Has no effect
lv.setSelection(0); // Has no effect
mActionMode = null;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?