安卓5.0 ListActivity不填充的ListView

2015-3-18 11:11:31     人阅读    

在以前版本正常显示的app,更新到android 5.0之后,ListActivity 中的ListView 内容不展示了,程序也不崩溃,就是ListView是空的,我调试过了,发现adapter适配器里面是有数据的,莫名其妙的问题,难道android 5.0 listView改动了?

  实现ListActivity 的是 MainActivity ,ListView 也是在 MainActivity中,下面是具体的配置文件和代码。。
   MainActivity 布局文件:

<RelativeLayout 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:background="@drawable/bg"
 
    tools:context=".MainActivity" >



    <ImageView
 
        android:id="@+id/bg_img"
 
        android:layout_width="wrap_content"
 
        android:layout_height="fill_parent"
 
        android:layout_centerVertical="true"
 
        android:contentDescription="@string/app_name"
 
        android:scaleType="fitCenter"
 
        android:src="@drawable/bg_image" />



    <ListView
 
        android:id="@android:id/list"
 
        android:layout_width="fill_parent"
 
        android:layout_height="fill_parent"
 
        android:layout_marginBottom="10sp"
 
        android:layout_marginEnd="10sp"
 
        android:layout_marginLeft="10sp"
 
        android:layout_marginRight="10sp"
 
        android:layout_marginStart="10sp"
 
        android:layout_marginTop="10sp"
 
        android:divider="@android:color/transparent"
 
        android:dividerHeight="8dp" >
 
    </ListView>
</RelativeLayout>


MainActivity 代码:

public class MainActivity extends ListActivity {
 
    private ArrayList<MyClass> class = new ArrayList<MyClass>();
 
    private ProgressDialog dialog;
 
    private ArrayList<MyItem> classlist;
 
    private Context context;
 
    ListAdapter adapter;



    @Override
 
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_main);



        classlist = new ArrayList<MyItem>();
 
        context = this;



        if (contentInMemory) {
 
            readFromMemory();
 
        } 
 
        if (!contentInMemory) {
 
            readFromOnline()
 
        }
 
    }



    private void readFromOnline() {
 
        //read content from online
 
        readOnline();
 
        doAfterLoad();
 
    }



    private void readFromMemory() {
 
        //read content from memory
 
        doAfterLoad();
 
    }



    private void doAfterLoad() {
 
        adapter = new ListAdapter(context, class);
 
        setListAdapter(adapter);
 
    }



    private void saveToMemory() {
 
        //saves to memory
 
    }



    private class readOnline extends AsyncTask<String, String, String> {



        protected void onPreExecute() {
 
            //shows dialog
 
        }



        @Override
 
        protected String doInBackground(String... strings) {
 
            //reads content
 
        }



        @Override
 
        protected void onPostExecute(String lenghtOfFile) {
 
            saveToMemory();
 
            doAfterLoad();
 
        }
 
    }



    public class ListAdapter extends ArrayAdapter<MyClass>{
 
        private final Context context;



        public ListAdapter(Context context, ArrayList<MyClass> class) {
 
            super(context, R.layout.myclass_listlayout, class);
 
            this.context = context;
 
        }



        @Override
 
        public View getView(int position, View convertView, ViewGroup parent) {
 
            LayoutInflater inflater = (LayoutInflater)
 
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



            final View rowView = inflater.inflate(R.layout.myclass_listlayout, parent, false);
 
            //fills textviews with content
 
            return rowView;
 
        }
 
    }
}
}

我是在doAfterLoad()方法里面给ListView设置的  setListAdapter(adapter);
  我可以保证app在小于5.0的版本中正常工作


 

处理方法


你设置 setListAdapter(adapter); 有问题,你需要先通过 findViewById 从布局中获得你的listView ,然后再给ListView设置  setListAdapter(adapter);


原文地址:http://www.itmmd.com/201503/657.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android 获得手机中的SIM卡信息和MSISDN、ICCID、IMEI信息   上一篇
下一篇  Android开发: TimePicker 元素焦点定位问题
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!