标签: android-listview

Android ListView适配器notifyDataSetInvalidated()vs notifyDataSetChanged()

有什么不同?android文档没有notifyDataSetInvalidated()的描述.我想也许您调用该函数来通知所有已注册的侦听器,但是使用notifyDataSetChanged()来通知它们?

android android-listview android-adapter

63
推荐指数
1
解决办法
2万
查看次数

Listview中的EditText在Android 4.x上按下时失去焦点

我知道这里有很多类似的问题,但我无法在简单的示例应用程序中使用任何提供的解决方案.

第一次显示软键盘时会出现问题.显示后,只需再次按editText即可进行编辑.

尝试以下方法:

 android:windowSoftInputMode="adjustPan|adjustResize"
Run Code Online (Sandbox Code Playgroud)

这不是解决任何问题.在弹出软键盘后,似乎必须使用此行来调整活动的大小.不幸的是,它也导致任何EditTexts失去焦点.这可能是ListView本身在调整大小过程后获得关注的焦点.所以我尝试了以下解决方法:

 listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
Run Code Online (Sandbox Code Playgroud)

这总是导致第一可见的EditTextListView包含获得焦点,这是不可取的.第二行中的第二个EditText应该在按下时获得焦点,这不会发生.此外,如果我最终设法聚焦另一个EditText,然后显示第一个(例如通过按下'Next' softkeyboard),第一个可见的将在键盘被解除后重新获得焦点并且ListView再次调整为其完整大小.

我尝试了其他一些事情,比如拦截onFocusChange()ListView的事件,同时知道它按下了哪个EditText TouchListener.再次请求关注某个EditText也没有取得任何成功.

对于相关项目,使用a ScrollView而不是ListView其他用户建议的选项不是一种选择.

android ontouchlistener android-softkeyboard android-listview android-edittext

63
推荐指数
4
解决办法
3万
查看次数

ListView项目滚动动画("UIKit动态" - 类似)

我正在尝试ListView在滚动发生时为项目设置动画.更具体地说,我试图从iOS 7上的iMessage应用程序模拟滚动动画.我在网上找到了一个类似的例子:

为了澄清,我试图在用户滚动时对项目实现"流畅"运动效果,而不是在添加新项目时实现动画效果.我试图修改我的视图,我BaseAdapter已经查看了AbsListView源代码,看看我是否能以某种方式附加一个AccelerateInterpolator可以调整发送到子视图的绘制坐标的地方(如果这甚至是如何AbsListView设计).到目前为止,我一直无法取得任何进展.

有没有人对如何复制这种行为有任何想法?


有关谷歌搜索帮助的记录:这在ios上被称为"UIKit Dynamics".

如何复制消息在iOS 7中弹跳气泡

它内置于最近的iOS版本中.然而,它仍然有点难以使用.(2014)这是每个人都复制的帖子:广泛复制的文章令人惊讶的是,UIKit Dynamics仅适用于苹果的"收藏视图",而不是苹果的"桌面视图",因此所有的iOS debs都必须将内容从表视图转换为"集合视图"

每个人都在使用的库是BPXLFlowLayout作为起点,因为那个人几乎破解了复制iphone短信应用程序的感觉.事实上,如果你将它移植到Android我猜你可以使用那里的参数来获得相同的感觉.我注意到在我的android fone系列中,HTC手机在他们的UI上有这种效果.希望能帮助到你.Android摇滚!

android android-animation android-listview

62
推荐指数
4
解决办法
3万
查看次数

Android系统.notifyDataSetChanged()方法和ListViews如何工作?

我试图理解这个ListView概念及其工作原理,我正在尝试创建自己的扩展适配器BaseAdapter.对于ArrayAdapter例如,有notifyDataSetChanged()你已经更新了其持有的所有数据数组列表后,为了刷新应该被调用的方法ListView.

但我正在创建自己的子类BaseAdapter.那种方法对我来说不可用,或者是吗?我该如何实现这种方法?基本上,这种方法究竟做了什么,也许我会理解的.

如果ArrayAdapter我猜测它会查看ListView当前显示的位置,并检查它是否与ArrayList更新后的位置相同?要么...

它说的方法:

通知附加的观察者基础数据已被更改,反映数据集的任何视图都应自行刷新.

但它究竟是如何刷新自己的呢?

有人可以解释一下吗?

android android-listview android-adapterview

59
推荐指数
3
解决办法
7万
查看次数

在Android中删除ListView项目

有人可以给我一个删除所有ListView项目并替换为新项目的示例代码吗?

我尝试更换适配器项而没有成功.我的代码是

populateList(){

 results //populated arraylist with strings

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results);

 listview.setAdapter(adapter);
 adapter.notifyDataSetChanged();
 listview.setOnItemClickListener(this);

}

// now populating list again

repopulateList(){

 results1 //populated arraylist with strings

 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results1);

 listview.setAdapter(adapter1);
 adapter1.notifyDataSetChanged();
 listview.setOnItemClickListener(this);
}
Run Code Online (Sandbox Code Playgroud)

这里的repopulateList()方法将添加到ListView项,但它不会删除/替换所有ListView项.

android android-listview

58
推荐指数
5
解决办法
21万
查看次数

带有ProgressBar的Endless RecyclerView用于分页

我正在使用一个RecyclerView并从API获取对象,批量为十.对于分页,我使用EndlessRecyclerOnScrollListener.

一切正常.现在剩下的就是在列表底部添加一个进度微调器,同时由API提取下一批对象.以下是Google Play商店应用的屏幕截图,其中显示了以下ProgressBar内容RecyclerView:

在此输入图像描述

问题是,在获取下一批对象时,既RecyclerView没有EndlessRecyclerOnScrollListener内置支持也没有显示ProgressBar底部的内置支持.

我已经看到了以下答案:

1. 将不确定的ProgressBar页脚放在RecyclerView网格中.

2. 添加项目到无尽的滚动RecyclerViewProgressBar在底部.

我不满意这些答案(由同一个人).这涉及null 在用户滚动时中途将对象拴入数据集中,然后在下一批次交付后将其取出.它看起来像是一个黑客,可以回避主要问题,可能会或可能不会正常工作.它会在列表中引起一些刺耳和失真

使用SwipeRefreshLayout不是解决方案.SwipeRefreshLayout涉及从顶部拉取以获取最新的项目,并且它无论如何都不显示进度视图.

有人可以为此提供一个很好的解决方案吗?我有兴趣知道Google是如何为自己的应用程序实现此功能的(Gmail应用程序也有此功能).是否有任何文章详细显示?所有的答案和评论将不胜感激.谢谢.

其他一些参考:

1. 分页RecyclerView.(精湛的概述......)

2. RecyclerView页眉和页脚.(更多相同......)

3. 无尽RecyclerViewProgressBar在底部.

android android-listview android-progressbar android-5.0-lollipop android-recyclerview

57
推荐指数
3
解决办法
4万
查看次数

为什么我的onItemSelectedListener没有在ListView中调用?

我正在使用像这样设置的ListView:

<ListView android:id="@android:id/list" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:longClickable="false"
    android:choiceMode="singleChoice">
</ListView>
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我将一个OnItemSelectedListener添加到ListView,如下所示:

getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
Run Code Online (Sandbox Code Playgroud)

我的Activity实现了这样的监听器:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: "
            + view.toString() + " Position: " + " Id: " + id);
}
Run Code Online (Sandbox Code Playgroud)

我的希望是,当我点击列表中的某些内容时,我会看到此调试输出.但调试输出永远不会显示在LogCat中.

android listener android-listview

56
推荐指数
1
解决办法
3万
查看次数

调用ListView.addHeaderView()时ClassCastException?

我有一个相当复杂的布局(包含RelativeLayouts,TextViews和ImageViews),我想放在listview上面.此视图应滚动列表视图.

我尝试使用以下代码将布局作为标题添加到listview:

View v = inflater.inflate(R.layout.list_view, container, false);

View header = inflater.inflate(R.layout.header_layout, container, false);

// populate views in the header

mList = (ListView)v.findViewById(R.id.list);
mList.addHeaderView(header);
mAdapter = new ReviewsAdapter(getActivity());
mList.setAdapter(mAdapter); <-- error occurs here
Run Code Online (Sandbox Code Playgroud)

ReviewsAdapter是我编写的自定义适配器,它扩展了BaseAdapter.

执行代码后,我收到此错误:

11-25 17:19:14.802: E/AndroidRuntime(1215): java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
11-25 17:19:14.802: E/AndroidRuntime(1215):     at android.widget.ListView.clearRecycledState(ListView.java:513)
11-25 17:19:14.802: E/AndroidRuntime(1215):     at android.widget.ListView.resetList(ListView.java:499)
11-25 17:19:14.802: E/AndroidRuntime(1215):     at android.widget.ListView.setAdapter(ListView.java:442)
11-25 17:19:14.802: E/AndroidRuntime(1215):     at com.coppi.storefront.product.ProductReviewsFragment.onCreateView(ProductReviewsFragment.java:104)
Run Code Online (Sandbox Code Playgroud)

如果我注释掉该mList.addHeaderView(header)行,我就不会收到错误.我也可以在没有列表视图的情况下显示标题布局.

我假设这与标题布局的内容有关,但我不确定究竟会导致它的原因.

这是标题xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <RelativeLayout
        android:layout_width="fill_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-listview

54
推荐指数
2
解决办法
2万
查看次数

setVisibility(GONE)视图变为不可见但仍占用空间

我有一个视图,实际上是一个按钮.这是它的XML布局(add_new.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <Button
        android:id="@+id/buttonNew"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/bText" 
        android:onClick="addNew"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

当我将其可见性设置为GONE时

v = getActivity().getLayoutInflater().inflate(R.layout.add_new, null);
v.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

它消失但仍占据空间.像这样:在此输入图像描述

这个按钮是一个标题,ListView由这个xml定义:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/porno" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="4dp"
        android:src="@drawable/ic_launcher">
    </ImageView>

    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:textSize="20dp" >
    </TextView>

</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)

当其可见性设置为GONE时,我不希望它占用额外的列表项.正如文档中所述.

GONE - 此视图不可见,并且不需要任何空间用于布局.

关于如何使它不占用空间的任何想法?

谢谢,Dennis xx

PS我的listview位于FoldersFragment内部,ListFragment这里是我的MainActivity的xml,其中提供了FoldersFragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/foldersFragment"
        android:layout_width="200dip"
        android:layout_height="match_parent"
        class="com.example.fragments.FoldersFragment" >
    </fragment> …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-view

53
推荐指数
3
解决办法
3万
查看次数

如何在android中创建自定义导航抽屉

嗨,我正在尝试创建类似于gmail app导航抽屉的导航抽屉.我关注开发者网站,但它只指定了基本实现.但我需要根据我的规格自定义导航.

  1. 我需要添加一个标题来对Drawer中的列表项进行分类
  2. 我需要一个单选按钮来选择我的一些选项

我怎样才能做到这一点?

android android-listview navigation-drawer

51
推荐指数
4
解决办法
15万
查看次数