java - Android Studio : Problems accessing Sub-Item in non activity class

标签 java android android-studio findviewbyid

更新: 网格现在可以正确显示,但内容丢失

我检查了

String text[] = getResources().getStringArray(R.array.main_table);

并且文本填充有字符串,如果我使用 Activity 文件中的代码,则会显示数据。

任何想法

<小时/>

原始问题

我在非 Activity 类中使用 findViewById() 时遇到问题。 如果我在顶层,那没问题。

((Activity)context).findViewById(R.id.statistic_grid);

但是当我尝试引用 subview 时,我得到“null”

View view = super.getView(position, convertView, parent);
TextView tv = (TextView) view.findViewById(R.id.statistic_cell_text); 

请任何人帮助我。

提前致谢

拉尔斯

public class MainStatisticGridView extends GridView {

  public MainStatisticGridView(Context context) {
    super(context);

    GridView statistic = (GridView) ((Activity)context).findViewById(R.id.statistic_grid);

    String[] from = new String[]{"text"};
    int[] to = new int[]{R.id.statistic_cell_text};

    List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
    String text[] = getResources().getStringArray(R.array.main_table);

    for (int i = 0; i < text.length; i++) {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("text", text[i]);
        fillMaps.add(map);
    }
    SimpleAdapter adapter = new MyCursorAdapter(((Activity)context), fillMaps, R.layout.calendar_title_cell, from, to);
    statistic.setAdapter(adapter);

}

private class MyCursorAdapter extends SimpleAdapter {

    public MyCursorAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
    }

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


        Set<Integer> VALUES = new HashSet<Integer>(Arrays.asList(
                new Integer[]{0, 1, 2, 3, 4, 5, 10, 15, 20}
        ));

        View view = super.getView(position, convertView, parent);
        if (VALUES.contains(Integer.valueOf(position))) {
            view.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
            TextView tv = (TextView) view.findViewById(R.id.statistic_cell_text);
            tv.setTextColor(getResources().getColor(R.color.statistic_title));
            view.setPadding(0, 0, 0, 0);
        } else {
            view.setBackground(getResources().getDrawable(R.drawable.border_intern));
        }
        return view;
    }
}

}

最佳答案

您需要像这样膨胀布局。一旦你膨胀了布局,你就可以获得子项目。

    private class MyCursorAdapter extends SimpleAdapter {

//private variables
    Context context;
    LayoutInflater inflater;
        public MyCursorAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
            super(context, data, resource, from, to);
         this.context = context;
//get layoutinflater
         inflater = LayoutInflater.from(context);
        }

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


            Set<Integer> VALUES = new HashSet<Integer>(Arrays.asList(
                    new Integer[]{0, 1, 2, 3, 4, 5, 10, 15, 20}
            ));

//inflate your layout
           if(convertView==null)
    {
          convertView = inflater.inflater(layoutfile, parent,false);
    }     


            if (VALUES.contains(Integer.valueOf(position))) {
                convertView.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
                TextView tv = (TextView) convertView.findViewById(R.id.statistic_cell_text);
                tv.setTextColor(getResources().getColor(R.color.statistic_title));
                convertView.setPadding(0, 0, 0, 0);
            } else {
                convertView.setBackground(getResources().getDrawable(R.drawable.border_intern));
            }
            return convertView;
        }
    }

请注意,我没有对此进行测试。

关于java - Android Studio : Problems accessing Sub-Item in non activity class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41522198/

相关文章:

java - 如何将我的表单与操作链接起来?

java - 比较两个非常大的列表(不适合内存)的最佳方法是什么?

java - 在 Android 中将 JSONObject 上传到 Iris CouchDb

c# - 套接字 - Java 客户端,C# 服务器

gradle - Android Studio/gradle : "Could not create plugin of type ' LibraryPlugin'"

Android studio 需要为 Mac Monterey 更新

java - J2me 检测应用程序的首次启动

java - 如何让 JButton 填充网格布局中的两个空格?

android - 如何在 Android 中手动设置相机焦点值

android-studio - 在配置中设置模块