java - 从 fragment 创建新的列表适配器。知道如何从 Activity 而不是 fragment 中做到这一点

标签 java android android-layout

我有一个 ArrayAdapter,我想从 Fragment 中调用(创建)它,我知道如何从 Activity 中执行此操作,但不知道如何从 Fragment 中执行此操作,也许你们中的一个人可以给我正确的语法?

无论如何,我尝试从 fragment 中执行以下操作

ShareHoldingAdapter adapter = new ShareHoldingAdapter(this, R.layout.listview_item_row, allShareHoldings);

但是我的适配器有构造函数 ShareHoldingAdapter(Context portfolioFragMent, int layoutResourceId, ArrayList<ShareHolding> data)即它是一个“上下文”,而不是“PortolioFragment”或只是一个 fragment

您将如何更改我的适配器,以便可以从 fragment 而不是现在(从 Activity 中调用它?)

这是我的适配器代码

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

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

public class ShareHoldingAdapter extends ArrayAdapter<ShareHolding>{

    Context context; 
    int layoutResourceId;    
    ArrayList<ShareHolding> data = null;
    private ShareHolder holder;
    private ShareHolding shareHold;


    private int buttonPressed = 0;
    public void setButtonPressed(int buttonPressed) {
        this.buttonPressed = buttonPressed;
        notifyDataSetChanged();
    }


    public ShareHoldingAdapter(Context portfolioFragMent, int layoutResourceId, ArrayList<ShareHolding> data) {//Need to change this constructor to accept a fragment instead of an activiy (context)
        super(portfolioFragMent, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = portfolioFragMent;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ShareHolder();
            holder.imgIcon = (TextView)row.findViewById(R.id.imgen);
            holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);

            row.setTag(holder);
        }
        else
        {
            holder = (ShareHolder)row.getTag();
        }

        shareHold = data.get(position);
        holder.txtTitle.setText(shareHold.getName());

        //buttonPressed

        switch (buttonPressed) {
        case 0: 
            holder.imgIcon.setText(Double.toString(shareHold.getSharesChangeTodayPercent()));
          break;
        case 1: 
            holder.imgIcon.setText(Double.toString(shareHold.getCurrentRate()));
          break;
        case 2: 
            holder.imgIcon.setText(Double.toString(shareHold.getNrOfSharesInPortfolio()));
          break;
        case 3: 
            holder.imgIcon.setText(Double.toString(shareHold.getTotalPercentDifference()));
          break;
        case 4: 
            holder.imgIcon.setText(Double.toString(shareHold.getTotalDiffrenceKr()));
          break;
        case 5: 
            holder.imgIcon.setText(Double.toString(shareHold.getTotalKr()));
          break;
        default: 
            holder.imgIcon.setText(Double.toString(shareHold.getBuyingRate()));
      }

        //holder.imgIcon.setText(Double.toString(weather.getBuyingRate()));
        return row;
    }

    static class ShareHolder
    {
        TextView imgIcon;
        TextView txtTitle;
    }
}

最佳答案

要从 fragment 创建适配器,您应该调用:

ShareHoldingAdapter adapter = new ShareHoldingAdapter(getActivity(), R.layout.listview_item_row, allShareHoldings);

由于Fragment.getActivity()返回Activity,它是Context的子类

关于java - 从 fragment 创建新的列表适配器。知道如何从 Activity 而不是 fragment 中做到这一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725664/

相关文章:

java - Hibernate-Spatial、JPA、Spring、MySQL 5.7(无法检索点)

java - Google Maps API V2 如何获取位置?

android - 创建文件android时出错

android - 如何在 Android Studio (Gradle) 中添加 apache commons 集合

android - Android 应用程序中带标签文本的实现概述文本字段输入

android - 如何为所有 Activity 设置全屏布局

java - 如何在单个 Activity 中添加多个 onActivityResult() 而不转到其他 Activity?

c# - 我应该在具有固定类型大小的语言(如 Java、C#)中的 64 位上使用 'long' 而不是 'int'

java - OpenCV FeatureDetector 从文件读取后似乎没有设置各种属性

android - 为什么我的 Action Bar 不叠加?