相关疑难解决方法(0)

如何更新ListView中的单行?

我有一个ListView显示新闻项目.它们包含图像,标题和一些文本.图像被加载到一个单独的线程(带有队列和所有)中,当下载图像时,我现在调用notifyDataSetChanged()列表适配器来更新图像.这是有效的,但是getView()因为notifyDataSetChanged()调用getView()了所有可见的项目而被过于频繁地调用.我想只更新列表中的单个项目.我该怎么做?

我目前使用的方法存在的问题是:

  1. 滚动很慢
  2. 我在图像上有一个淡入动画,每次加载列表中的一个新图像时都会发生这种动画.

android android-arrayadapter android-listview

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

Android ListView刷新单行

在获得单行a的数据后ListView,我想更新该行.

目前我正在使用,notifyDataSetChanged();但这使得View反应非常缓慢.还有其他解决方案吗?

performance android listview

76
推荐指数
4
解决办法
6万
查看次数

如何在listview中获取行的位置(在屏幕上)

我已经实现了一些手势检测代码,以便我可以检测列表视图中的行(位于FrameLayout中)是否已被刷过.

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
        int itemId = MainActivity.this.getListView().pointToPosition((int) e1.getX(),(int) e1.getY());
        Offer order = (Offer)MainActivity.this.getListView().getAdapter().getItem(itemId);
        View v = MainActivity.this.getListView().getChildAt(itemId);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在滑动行的顶部显示一个视图,其中包含该行的一组上下文相关选项.

我的问题是以下方法:

v.getTop()
v.getBottom()
Run Code Online (Sandbox Code Playgroud)

仅在滚动视图之前返回正确的值.我可以做一些计算来计算使用滚动位置等的偏移量,但我也注意到,当我在屏幕上滑动可见的行时,我只获取值.如果我向下滚动列表然后滑动一行(原来不在屏幕外),则这些方法返回空值.

以下方法似乎遇到了同样的问题......

v.getLocationOnScreen(loc)
v.getLocationInWindow(loc)
Run Code Online (Sandbox Code Playgroud)

最后,我希望找到可见列表顶部与已刷过的行之间的距离.然后,我将使用此距离将父视图添加到具有适当高度填充的父FrameLayout(以便它覆盖滑动的行).

任何帮助将非常感激!

android

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

ListView更新单行

一旦按下按钮,我想用不同的内容更新列表视图中的单行.我知道我可以使用notifydatasetchanged()但这会更新整体listView.

我已经阅读了这个答案,它非常适合我想做的事情.

我已经完成了5行的列表视图,当我按下按钮时,我想用不同的文本更新第4行.我不想以编程方式设置文本,因为这只是一个虚拟项目,只是为了查看是否可以刷新单行,而我的真实项目比仅仅更复杂textview.

所以我的问题是:我可以getView()用来更新一行listview吗?

这是我的代码:

我的活动:

public class MainActivity extends Activity {

    public ListView list1;
    public listAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list1 = (ListView) findViewById(R.id.my_list);
        adapter = new listAdapter(this);
        list1.setAdapter(adapter);

        Button button1 = (Button) findViewById(R.id.my_button);
        button1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                adapter.setText("Different text");
                View row2Update = list1.getChildAt(3);
                list1.getAdapter().getView(3, row2Update, list1);

            }
        });

    } 

}
Run Code Online (Sandbox Code Playgroud)

我的适配器:

public class listAdapter extends BaseAdapter{

    public …
Run Code Online (Sandbox Code Playgroud)

java android

5
推荐指数
1
解决办法
1163
查看次数