将数据传递到自定义视图

时间:2019-08-06 20:33:36

标签: android android-view

我想将数据传递到我的自定义视图(列表)。它起作用了,但是由于某些原因,我现在得到了一个N​​ullpointer异常,我也不知道为什么。

我通过构造函数传递数据,但是列表大小始终为零,但是当我尝试在构造函数中获取列表大小时,我得到了正确的大小,但在其外部始终为0。

MainActivity.java

C:\Users\kshnk>pip install pyinstaller
Collecting pyinstaller
  Downloading https://files.pythonhosted.org/packages/e2/c9/0b44b2ea87ba36395483a672fddd07e6a9cb2b8d3c4a28d7ae76c7e7e1e5/PyInstaller-3.5.tar.gz (3.5MB)
     |████████████████████████████████| 3.5MB 2.2MB/s
  Installing build dependencies ... error
  ERROR: Command errored out with exit status 1:
   command: 'c:\python37\python.exe' 'c:\python37\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\kshnk\AppData\Local\Temp\pip-build-env-11qk42u_\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel
       cwd: None
  Complete output (24 lines):
  Traceback (most recent call last):
    File "c:\python37\lib\runpy.py", line 193, in _run_module_as_main
      "__main__", mod_spec)
    File "c:\python37\lib\runpy.py", line 85, in _run_code
      exec(code, run_globals)
    File "c:\python37\lib\site-packages\pip\__main__.py", line 16, in <module>
      from pip._internal import main as _main  # isort:skip # noqa
    File "c:\python37\lib\site-packages\pip\_internal\__init__.py", line 40, in <module>
      from pip._internal.cli.autocompletion import autocomplete
    File "c:\python37\lib\site-packages\pip\_internal\cli\autocompletion.py", line 8, in <module>
      from pip._internal.cli.main_parser import create_main_parser
    File "c:\python37\lib\site-packages\pip\_internal\cli\main_parser.py", line 7, in <module>
      from pip._internal.cli import cmdoptions
    File "c:\python37\lib\site-packages\pip\_internal\cli\cmdoptions.py", line 24, in <module>
      from pip._internal.models.search_scope import SearchScope
    File "c:\python37\lib\site-packages\pip\_internal\models\search_scope.py", line 11, in <module>
      from pip._internal.utils.misc import normalize_path, redact_password_from_url
    File "c:\python37\lib\site-packages\pip\_internal\utils\misc.py", line 58, in <module>
      from typing import cast, Tuple
    File "c:\python37\lib\site-packages\typing.py", line 1356, in <module>
      class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
    File "c:\python37\lib\site-packages\typing.py", line 1004, in __new__
      self._abc_registry = extra._abc_registry
  AttributeError: type object 'Callable' has no attribute '_abc_registry'
  ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\python37\python.exe' 'c:\python37\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\kshnk\AppData\Local\Temp\pip-build-env-11qk42u_\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=40.8.0' wheel Check the logs for full command output.

LineChart2.java     包com.example.viewtest;

LineChart2 lineChart2;
List<items> items = new ArrayList<>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    items.add(new items(R.color.babyBlau,10,"Internet"));
    items.add(new items(R.color.colorAccent,20,"Internet"));
    items.add(new items(R.color.rot,60,"Internet"));

    lineChart2 = new LineChart2(MainActivity.this,items);


}

}

1 个答案:

答案 0 :(得分:1)

我已经编译了您的代码,并且效果很好。唯一会产生问题的原因是在设置数据之前将布局附加到其容器。

最好从下面的代码中添加布局。

    LinearLayout anyDesiredLayout= findViewById(R.id.layout);

    items.add(new items(R.color.colorAccent, 10, "Internet"));
    items.add(new items(R.color.colorAccent, 20, "Internet"));
    items.add(new items(R.color.colorAccent, 60, "Internet"));

    LineChart2 lineChart2 = new LineChart2(this, items);

    anyDesiredLayout.addView(lineChart2);

编辑

问题是您要创建两个视图

此行new LineChart2(this, items);将创建一个新视图,该视图不同于您在xml中附加的视图。

lineChart2情况下,您可以看到items的构造函数中已正确设置lineChart2。但是尚未调用onDraw,因为您没有将视图附加到任何容器。

并且将调用xml onDraw方法中的视图,但您会发现items列表为空。因为LineChart2(Context context, List<items> items)从未被调用过。