Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法在Android手机上加载listview_Android_Listview - Fatal编程技术网

我无法在Android手机上加载listview

我无法在Android手机上加载listview,android,listview,Android,Listview,我无法在手机上加载listview。它在logcat中显示错误: 03-24 05:27:14.537: D/AbsListView(22125): unregisterIRListener() is called 我的代码如下 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

我无法在手机上加载listview。它在logcat中显示错误:

03-24 05:27:14.537: D/AbsListView(22125): unregisterIRListener() is called 
我的代码如下

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        setHasOptionsMenu(true);    
        rootView = inflater.inflate(R.layout.fragment_event, container, false);
        listView = (ListView) rootView.findViewById(R.id.eventListView);
            listView.setVisibility(View.VISIBLE);
        listView.setClickable(true);
        EventArrayAdapter eArrayAdapter = new EventArrayAdapter(getActivity(), R.layout.rowlayout, events);
        listView.setAdapter(eArrayAdapter);
        eArrayAdapter.notifyDataSetChanged();      
            return rootView; 
}
rowlayout.xml

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/eventDay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#1d766f"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#FFFFFF" />

        <TextView
            android:id="@+id/eventMonth"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#e2fffd"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#0083af" />

        <TextView
            android:id="@+id/eventTime"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#e2fffd"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#1d766f" />
    </LinearLayout>

     <LinearLayout android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                     android:orientation="vertical">
        <TextView  
            android:id="@+id/eventName"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#0083af"/>

         <TextView  
            android:id="@+id/eventLocation"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"/>
    </LinearLayout>          
</LinearLayout>
<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="vertical" >

   <Button
             android:id="@+id/btnAllEvent"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
                 android:text="All Events"           
       />       


  <ListView
        android:id="@+id/eventListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"/>    
</LinearLayout>

mainlayout.xml

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/eventDay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#1d766f"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#FFFFFF" />

        <TextView
            android:id="@+id/eventMonth"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#e2fffd"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#0083af" />

        <TextView
            android:id="@+id/eventTime"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#e2fffd"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#1d766f" />
    </LinearLayout>

     <LinearLayout android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                     android:orientation="vertical">
        <TextView  
            android:id="@+id/eventName"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#0083af"/>

         <TextView  
            android:id="@+id/eventLocation"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"/>
    </LinearLayout>          
</LinearLayout>
<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="vertical" >

   <Button
             android:id="@+id/btnAllEvent"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
                 android:text="All Events"           
       />       


  <ListView
        android:id="@+id/eventListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"/>    
</LinearLayout>

不幸的是,它没有显示任何内容,甚至listview本身。请帮帮我。多谢各位


更新:我使用视图持有者模式

您必须简单地返回视图。

此外,为了更好地滚动,您需要实现并理解
ViewHolder
模式。 您应该使用它的原因是:

  • 布局膨胀是昂贵的操作
  • 如果您这样做:

    public View getView(int position, View convertView, ViewGroup parent) {
    
        LayoutInflater mInflater = mContext.getLayoutInflater();
        View item = mInflater.inflate(R.layout.list_item, null);
    
        MyObj data = getItem(position);
    
       ((TextView) item.findViewById(R.id.text1)).setText(data.text1);
       ((TextView) item.findViewById(R.id.text2)).setText(data.text2);
       ((TextView) item.findViewById(R.id.longtext)).setText(data.longText);
       return item;
    }
    
    请不要这样做,因为适配器将为每个位置创建一个新视图,如果您有一个很长的列表,它将导致延迟滚动。假设列表中有500个项目,适配器必须创建500个视图

    因此,ViewHolder模式通过如下更改上面的代码来解决此问题:

    public View getView(int position, View convertView, ViewGroup parent) {
         Log.d(TAG, "position=" + position);
    
         ViewHolder holder;
         if (convertView == null) {
               convertView = mInflater.inflate(R.layout.list_item, parent, false);
               holder = new ViewHolder();
               holder.text1 = (TextView) convertView.findViewById(R.id.text1);
               holder.text2 = (TextView) convertView.findViewById(R.id.text2);
               holder.longtext = (TextView) convertView.findViewById(R.id.longtext);
               convertView.setTag(holder);
         } else {
               holder = (ViewHolder) convertView.getTag();
         }
    
         MyObj data = getItem(position);
         holder.text1.setText(data.text1);
         holder.text2.setText(data.text2);
         holder.longtext.setText(data.longText);
    
         return convertView;
     }
    
    当ListView要求您回收行布局时,getView方法中的
    convertView
    将具有非空值。因此,当convertView不为null时,您应该简单地更新其内容,而不是扩展新的行布局

    这段代码的作用如下:

    public View getView(int position, View convertView, ViewGroup parent) {
         Log.d(TAG, "position=" + position);
    
         ViewHolder holder;
         if (convertView == null) {
               convertView = mInflater.inflate(R.layout.list_item, parent, false);
               holder = new ViewHolder();
               holder.text1 = (TextView) convertView.findViewById(R.id.text1);
               holder.text2 = (TextView) convertView.findViewById(R.id.text2);
               holder.longtext = (TextView) convertView.findViewById(R.id.longtext);
               convertView.setTag(holder);
         } else {
               holder = (ViewHolder) convertView.getTag();
         }
    
         MyObj data = getItem(position);
         holder.text1.setText(data.text1);
         holder.text2.setText(data.text2);
         holder.longtext.setText(data.longText);
    
         return convertView;
     }
    
    如果ConvertView为null,它将膨胀布局并将每个视图保存在ViewHolder类下,ViewHolder所做的是保存视图,然后使用setTag(Object Object)将ViewHolder保存在ConverView中,如果ConvertView不为null,则它将获得如下ViewHolder对象:holder=(ViewHolder)ConvertView.getTag(); 然后它从列表中获取当前对象,并使用getView方法中的position变量通过ViewHolder实例引用everyView


    也不要使用
    android:layout\u height=“wrap\u content”
    ,因为listView需要调用getView()很多时间才能知道它应该有多大,所以请改用
    android:layout\u height=“fill\u parent”

    您需要在
    onCreateView
    中返回一个视图。缺少
    return rootView
    您需要返回视图,并尝试应用recyle模式,否则您的滚动将变慢。@LuisAlberto我想知道循环模式?对不起,我指的是ViewHolder模式。您好,谢谢您的回复。我已经返回了rootView,但是错误仍然存在。AbsListView(22125):调用UnregisterListener()。Listview根本不显示。请帮忙。。。