android - android中的Listview直到拖动才刷新 View

标签 android layout android-listview refresh

我正在使用下面的代码:

private Runnable returnRes = new Runnable() {

        @Override
        public void run() {
            if(m_orders != null && m_orders.size() > 0){
                m_adapter.notifyDataSetChanged();
                for(int i=0;i<m_orders.size();i++)
                m_adapter.add(m_orders.get(i));
            }
            m_ProgressDialog.dismiss();
            m_adapter.notifyDataSetChanged();
        }
      };

但奇怪的是,在列表填充后,唯一可用的项目是列表中的第一个项目,正下方的行将是空的,除非我将其拖出 View 然后再拖回来然后它会显示。我很确定上面的代码是正确的,因为我遵循了教程。但是,我不能指望用户再次向下和向后拖动以查看所涉及的内容...

补充一下,我只是注意到我的数据没有正确填充,因为会出现此警告 07-19 23:54:49.947: WARN/InputManagerService(58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44eb97c0 我很确定我的代码是正确的,下面是它停止的地方:

public View getView(int position, View convertView, ViewGroup parent){
    View v = convertView;
    if(v != null){
        return v;
    }
    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.row, null);

    Log.d("added", "g" + position);
    Grade g = grades.get(position);
    if(g != null){
        TextView name = (TextView) findViewById(R.id.bottomtext);
        TextView id = (TextView) findViewById(R.id.toptext);
        if(name != null)
            name.setText(g.getName());
        if(id != null)
            id.setText(g.getId());
        Log.d("grade", "grade " + g.toString());

    }

    return v;
}

从 LogCat 跟踪我只能到达位置 3 :( 可能是什么问题? 有人请帮助我...

LoginByHttpPost gradeIndex = new LoginByHttpPost();
    HttpURLConnection gradePage = gradeIndex.doHttpGet(TARGETURL);
    String gradeInd = gradeIndex.readResponse(gradePage);

    Document doc = Jsoup.parse(gradeInd);
    // do more things here


    Log.d("grade now ", grades.get(0).text());
    Log.d("gradef now ", gradesF.text());

    for(int i = 0; i < grades.size(); i += 5){
        Grade grade = new Grade();
        grade.setId(grades.get(i).text());
        grade.setName(grades.get(i + 1).text());
        //gradeList.add(grade);
        ga.add(grade);    //this is my arrayadapter not sure where to add my object to through :(

    }

    for(int i = 0; i < gradesF.size(); i++){
        gradeList.get(i).setGrade(gradesF.get(i).text());
    }



} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Log.d("prob", e.getMessage());

}

这是从函数 doInBackground() 中的 asyncatask 调用的

最佳答案

尝试调用 ListView.invalidateViews()在 ListView 上。为我工作。

即使您从适配器上的 UI 线程调用 notifyDataSetChanged() 和/或 notifyDataSetInvalidated(),它们也只会使数据无效,而不会使 View 无效。因此。

关于android - android中的Listview直到拖动才刷新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6732230/

相关文章:

android - 滚动后如何在 ListView 顶部显示完全可见的项目?

java - 从android中的类获取静态值

java - 访问 SMS 消息类型常量

安卓 :WindowManager$BadTockenException on Spinner Click

android - 使用阴影创建自定义 ListView

android - 如何在 Android 中实现类似 Facebook 签到的 View ?

缺少 Android Studio/dev/kvm

layout - 定义页面树的前端布局

ios - UINavigationController 和自动布局顶部布局指南的奇怪行为

java - Box 中 "rigid area"和 "strut"的区别