如何为嵌套片段实现自定义适配器

伊戈尔

我正在尝试在嵌套片段中创建一个列表视图,该片段将作为元素图像保存在其下方,并在其下方带有标题,尽管我在我创建的用于填充列表视图的自定义适配器中不断收到空指针错误。这是代码:

自定义适配器:

import android.app.Activity;
import android.view.View;
        import android.content.Context;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
        import android.widget.ImageView;
        import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class ImageAdapter extends ArrayAdapter<Image> {

    ArrayList<Image> imageList;
    private Context mContext;
    int resource;

    public ImageAdapter(Context context, int resource, ArrayList<Image> imageObjects) {
        super(context, resource, imageObjects);
        this.imageList = imageObjects;
        this.mContext = context;
        this.resource = resource;
    }

    public ArrayList<Image> getImageList() {
        return imageList;
    }

    public void setImageList(ArrayList<Image> imageList) {
        this.imageList = imageList;
    }

    public Context getmContext() {
        return mContext;
    }

    public void setmContext(Context mContext) {
        this.mContext = mContext;
    }

    public int getResource() {
        return resource;
    }

    public void setResource(int resource) {
        this.resource = resource;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){

        if(convertView==null){
            LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.fragment_membership, null, true);

        }

        Image image = getItem(position);

        ImageView layoutImage = (ImageView)convertView.findViewById(R.id.membershipimage);
        layoutImage.setImageResource(image.getImageResourceID());
        TextView layoutText = (TextView)convertView.findViewById(R.id.membershipCaption);
        layoutText.setText(image.getImageCaption());

        return super.getView(position, convertView, parent);
    }
}

我在另一个片段中使用的片段:

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ListView;

import java.util.ArrayList;

public class MembershipFragment extends Fragment {

    ArrayList<Image> imageList;
    ListView membershipListView;

    public static MembershipFragment newInstance() {
        MembershipFragment fragment = new MembershipFragment();
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_membership, container, false);

        return view;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        imageList = new ArrayList<>();
        for(int i=0; i<3; i++){
            Image image = new Image(R.drawable.cinnamon_apple_breakfast, "Test Caption");
            imageList.add(image);
        }
        membershipListView = (ListView)view.findViewById(R.id.membershipListView);
        try{
            ImageAdapter adapter = new ImageAdapter(getContext(), R.layout.list_view_item, imageList);
            membershipListView.setAdapter(adapter);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

当我尝试将图像资源 ID 设置为图像视图时,应用程序在启动时不断崩溃,在 getView 方法的自定义适配器中抛出空指针异常。问题出在哪儿?

一个板球运动员

我认为你混淆了你的布局。

你应该getActivity在这里使用

ImageAdapter adapter = new ImageAdapter(getContext(), R.layout.list_view_item

你在那里传递了那个布局资源。但是在适配器内部,您使用的是不同的布局。

@Override
public View getView(int position, View convertView, ViewGroup parent){

    if(convertView==null){
        LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.fragment_membership, null, true);

    }

getResource出于某种原因,我假设您制定了一个方法?你从来不叫它。

我认为您不希望 Fragment 布局包含 Fragment 布局列表(因为递归)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_membership, container, false);

    return view;
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从自定义适配器调用片段功能

如何创建自定义适配器以将 cardview 用于片段内的列表视图

如何为用于图像和文本的列表视图创建自定义光标适配器?

如何为ember.js创建自定义适配器?

如何为列表视图创建自定义适配器?获取RessourceNotFoundException

如何为多选微调器设置自定义适配器?

如何为 chainlink 节点/外部适配器设置自定义超时?

如何使用自定义项目适配器在ListFragment中实现右滑动?

在对话框片段和自定义列表视图适配器之间实现接口时出错

如何在Android中自定义适配器?

如何从自定义基本适配器调用函数

自定义ListView的适配器

在片段中每个列表视图有多个文本视图的情况下,如何设置自定义适配器

谷歌地图标记群集广告自定义Infowindow适配器如何为clusterItem设置标记(标记)

使用自定义适配器在不可见的缓存片段上的ViewPager / Tab实现中重新加载/刷新片段

从自定义适配器发送消息到呼叫列表片段

从自定义适配器获取片段中的UI元素ID

无法将片段设置为自定义适配器的列表

我的自定义适配器未显示在片段中

片段Android中用于listview的自定义适配器

自定义适配器不适用于片段中的RecyclerView

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

如何使用Hashmap为自定义列表视图创建自定义适配器

使用自定义适配器来实现过滤器的ListView正在获取IndexOutOfBoundsException

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

创建自定义数据适配器:导入数据适配器

动态定义项目时如何创建自定义数组适配器

微调器OnItemSelected与自定义适配器

无法更新自定义适配器中的项目