具有自定义适配器的Listview在SherlockFragment中不起作用

菲利波

适配器:

public class ServerAdapter extends ArrayAdapter<Server>
{
    private Context Context; 
    private int ResourceId;    
    private List<Server> Data = null;

    public ServerAdapter(Context context, int layoutResourceId, List<Server> data)
    {
        super(context, layoutResourceId, data);
        ResourceId = layoutResourceId;
        Context = context;
        Data = data;
    }

    public void updateServersList(List<Server> newlist)
    {
        Data.clear();
        Data = newlist;
        this.notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View Row = convertView;
        ViewHolder Holder = null;
        Server server = Data.get(position);
        if(Row == null)
        {
            LayoutInflater inflater = ((Activity)Context).getLayoutInflater();
            Row = inflater.inflate(ResourceId, parent, false);

            Holder = new ViewHolder();          
            Holder.Hostname = (TextView)convertView.findViewById(R.id.hostname);
            Holder.Address = (TextView)convertView.findViewById(R.id.address);
            Holder.Players = (TextView)convertView.findViewById(R.id.players);
            Holder.Photo = (ImageView) convertView.findViewById(R.id.imageView1);   
            Row.setTag(Holder);
        }
        else
        {           
            Holder = (ViewHolder) Row.getTag();
        }

        Holder.Hostname.setText(server.getHostname());
        Holder.Address.setText("Address: " + server.getIp() + ":" + server.getPort());
        Holder.Players.setText("Players: " + server.getPlayers() + "/" + server.getMaxPlayers());
        Holder.Photo.setImageResource(server.getGameObject().getImageResId());
        return Row;
    }
}

class ViewHolder
{
   TextView Hostname;
   TextView Address;
   TextView Players;
   ImageView Photo;
}

SherlockFragment:

public class Favourites extends SherlockFragment
{   
    public static ListView FavoritesListView;
    public static ServerAdapter FavoritesAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View v = inflater.inflate(R.layout.servers, null);

        FavoritesListView = (ListView) v.findViewById(R.id.serverlistview);
        FavoritesAdapter = new ServerAdapter(this.getSherlockActivity(), R.layout.server, DataHandler.getUserFavoriteServersFromLocal());        
        FavoritesListView.setAdapter(FavoritesAdapter);
        return v;
    }
}

服务器.xml

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

server.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <RelativeLayout
        android:id="@+id/RelativeLayout1"
        android:layout_width="55dp"
        android:layout_height="59dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="6dp"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="55dp"
            android:layout_height="55dp"
            android:layout_marginTop="4dp"
            android:contentDescription="@string/game"
            android:src="@drawable/game" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="0dp"   
        android:layout_toRightOf="@+id/RelativeLayout1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/hostname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="0dp"
            android:paddingLeft="5dp"
            android:text="@string/hostname"
            android:textSize="18sp"
            android:textStyle="bold"
            android:ellipsize="end"
            android:singleLine="true" />
    </RelativeLayout>

    <TextView
        android:id="@+id/address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout2"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/relativeLayout2"
        android:paddingLeft="5dp"
        android:text="@string/address" />

    <TextView
        android:id="@+id/players"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/address"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/address"
        android:paddingLeft="5dp"
        android:text="@string/players" />       
</RelativeLayout>

错误:

07-30 13:11:38.824:E / AndroidRuntime(31423):致命例外:主要07-30 13:11:38.824:E / AndroidRuntime(31423):java.lang.NullPointerException 07-30 13:11:38.824: E / AndroidRuntime(31423):位于com.example.app.ServerAdapter.getView(ServerAdapter.java:47)07-30 13:11:38.824:E / AndroidRuntime(31423):位于android.widget.AbsListView.obtainView(AbsListView .java:2159)07-30 13:11:38.824:E / AndroidRuntime(31423):位于android.widget.ListView.makeAndAddView(ListView.java:1831)...

普列里根

该问题是由于片段生命周期的工作方式造成的。在您的onCreateView实现中,您在创建适配器时会引用该片段的活动。问题在于,直到调用onActivityCreated为止,该活动才可用于该片段。

如果按此处所述查看片段生命周期,则可以看到onCreateView之后是对onActivityCreated的调用。

尝试将一些代码从onCreateView移到onActivityCreated中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View v = inflater.inflate(R.layout.servers, null);      
    FavoritesListView = (ListView) v.findViewById(R.id.serverlistview);
    return v;
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {


    super.onActivityCreated(savedInstanceState);    

    FavoritesAdapter = new ServerAdapter(this.getSherlockActivity(), R.layout.servers, DataHandler.getUserFavoriteServersFromLocal());       
    FavoritesListView.setAdapter(FavoritesAdapter); 


}   

此外,您似乎在适配器的getView()代码中使用了错误的变量。您测试是否Row == null(这意味着convertView也是null),然后将Row指定为新膨胀的视图的值。但是,然后尝试从convertView查找子视图,该子视图仍然为null。

尝试如下编辑适配器的getView()方法:

    @Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View Row = convertView;
    ViewHolder Holder = null;
    Server server = Data.get(position);
    if(Row == null)
    {
        LayoutInflater inflater = ((Activity)Context).getLayoutInflater();
        Row = inflater.inflate(ResourceId, parent, false);

        Holder = new ViewHolder();          
        //Holder.Hostname = (TextView)convertView.findViewById(R.id.hostname);
        //Holder.Address = (TextView)convertView.findViewById(R.id.address);
        //Holder.Players = (TextView)convertView.findViewById(R.id.players);
        //Holder.Photo = (ImageView) convertView.findViewById(R.id.imageView1);   
        Holder.Hostname = (TextView)Row.findViewById(R.id.hostname);
        Holder.Address = (TextView)Row.findViewById(R.id.address);
        Holder.Players = (TextView)Row.findViewById(R.id.players);
        Holder.Photo = (ImageView)Row.findViewById(R.id.imageView1);  
        Row.setTag(Holder);
    }
    //etc
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SherlockFragment中具有自定义适配器的ListView,构造函数未定义(无法通过此方法)

来自分类Dev

OnItemCLickListener在ListView自定义适配器中不起作用

来自分类Dev

自定义适配器ListView,setOnCheckedChangeListener不起作用

来自分类Dev

notifyDatasetChanged在Android中的自定义适配器的getView()方法中不起作用

来自分类Dev

Android Java-Glide在自定义适配器中不起作用

来自分类Dev

如果条件在自定义适配器中不起作用(getView())

来自分类Dev

AsyncTask在自定义适配器中不起作用

来自分类Dev

具有自定义适配器的listview中的android更改列表项

来自分类Dev

片段中具有自定义适配器的ListView

来自分类Dev

具有自定义适配器的Listview覆盖我帖子中的数据

来自分类Dev

具有自定义适配器的listview中的Textview不会更新

来自分类Dev

Android Studio中带有自定义适配器的自定义ListView

来自分类Dev

更改自定义适配器onClick回调中的边距不起作用,Android

来自分类Dev

自定义对话框在适配器中不起作用,应用程序崩溃

来自分类Dev

Rhom的Ember-Data自定义适配器-FindAll不起作用

来自分类Dev

Android:使用带自定义适配器的notifyDataSetChanged()刷新ListFragment不起作用

来自分类Dev

自定义微调器适配器不起作用

来自分类Dev

用于Ember Data的自定义适配器不起作用

来自分类Dev

带notifyDataSetChanged的自定义适配器不起作用

来自分类Dev

自定义基本适配器不起作用过滤器

来自分类Dev

具有ListView片段和自定义ListView适配器的Android Pull-to-Refresh

来自分类Dev

ListView的自定义适配器

来自分类Dev

自定义ListView的适配器

来自分类Dev

自定义ListView适配器中的NullPointerException

来自分类Dev

在自定义适配器中遍历ListView

来自分类Dev

具有自定义适配器多选问题的android listview

来自分类Dev

具有自定义适配器的Listview图像和文本

来自分类Dev

具有自定义适配器的ListView:一些项目被隐藏

来自分类Dev

具有基本适配器列表项的自定义适配器重复

Related 相关文章

  1. 1

    SherlockFragment中具有自定义适配器的ListView,构造函数未定义(无法通过此方法)

  2. 2

    OnItemCLickListener在ListView自定义适配器中不起作用

  3. 3

    自定义适配器ListView,setOnCheckedChangeListener不起作用

  4. 4

    notifyDatasetChanged在Android中的自定义适配器的getView()方法中不起作用

  5. 5

    Android Java-Glide在自定义适配器中不起作用

  6. 6

    如果条件在自定义适配器中不起作用(getView())

  7. 7

    AsyncTask在自定义适配器中不起作用

  8. 8

    具有自定义适配器的listview中的android更改列表项

  9. 9

    片段中具有自定义适配器的ListView

  10. 10

    具有自定义适配器的Listview覆盖我帖子中的数据

  11. 11

    具有自定义适配器的listview中的Textview不会更新

  12. 12

    Android Studio中带有自定义适配器的自定义ListView

  13. 13

    更改自定义适配器onClick回调中的边距不起作用,Android

  14. 14

    自定义对话框在适配器中不起作用,应用程序崩溃

  15. 15

    Rhom的Ember-Data自定义适配器-FindAll不起作用

  16. 16

    Android:使用带自定义适配器的notifyDataSetChanged()刷新ListFragment不起作用

  17. 17

    自定义微调器适配器不起作用

  18. 18

    用于Ember Data的自定义适配器不起作用

  19. 19

    带notifyDataSetChanged的自定义适配器不起作用

  20. 20

    自定义基本适配器不起作用过滤器

  21. 21

    具有ListView片段和自定义ListView适配器的Android Pull-to-Refresh

  22. 22

    ListView的自定义适配器

  23. 23

    自定义ListView的适配器

  24. 24

    自定义ListView适配器中的NullPointerException

  25. 25

    在自定义适配器中遍历ListView

  26. 26

    具有自定义适配器多选问题的android listview

  27. 27

    具有自定义适配器的Listview图像和文本

  28. 28

    具有自定义适配器的ListView:一些项目被隐藏

  29. 29

    具有基本适配器列表项的自定义适配器重复

热门标签

归档