一名前VB6程序员,开始使用Android Studio。
我正在尝试在我的布局上引用ItemList。在VB中,我会做一些像Me.ItemList或ThisForm.ItemList
这样的事情但我知道MyActivity.XML.ItemList只是不会这样做。如何正确引用ItemList控件?
对不起这样一个菜鸟问题......我第一次来这里!
activity_my.xml文件中的代码:
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ItemList"
android:layout_centerVertical="true"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView" />
我需要做的是将它与适配器相关联。但这不起作用:
ArrayAdapter<String> myAdapter=new
ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
myStringArray);
我的问题是,android.R.layout.simple_list_item_1不是在Android Studio的MyActivity.XML文件中引用我的ListView对象的方法。我一直收到“无法解决符号'r'”的错误。
请问有人可以告诉我吗?
感谢!!!
答案 0 :(得分:1)
首先,获取ListView本身的方法相对简单。在Activity子类中,您可以这样做:
ALTER
在上面的示例中,ArrayAdapter在其构造函数中需要一个布局ID。此布局应包含单个TextView元素(或某些子类),用于呈现列表项。
ListView itemList = (ListView) findViewById(R.id.ItemList);
在很多情况下,值
<TextView .... />
就足够了。如果您想要不同的格式,但仍然只有一个TextView,您可以在此构造函数中提供自己的布局文件。
如果您想要比直接TextView更复杂的东西,那么您可以创建ArrayAdapter的子类,并覆盖getView方法。在这种情况下,我建议遵循此处所述的ViewHolder模式
How can I make my ArrayAdapter follow the ViewHolder pattern?
可以在此处看到ViewHolder模式的原因
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
最后,在完成所有操作后,在ListView上设置适配器:
android.R.layout.simple_list_item_1
至于“R”是什么,它是由你的IDE(eclipse,intellij,android studio)生成的文件,它存在于主包中(如AndroidManifest.xml中所示)。每次在具有新id的布局文件中创建新元素时,都会在“R.id”范围内将该条目添加到该类。在创建布局文件,drawable,维度值,字符串值等时也会发生同样的情况......
如果您在外面是主要软件包,只需使用IDE帮助您导入该类。只要小心你从你的包中导入一个,因为它自己有一个“android.R”为它自己的资源。
答案 1 :(得分:1)
您必须使用继承自AppCompatActivity类的findViewById()方法。然后调用列表视图setAdapter方法。
itemList.setAdapter(adapter);
ArrayAdapter将3个参数输入到它的构造函数中。第一个是你提供'this'的上下文,这是有效的,因为活动是Context类的子类。
您提供的第二个参数; android.R.layout.simple_list_item_1。 所有这一切都是格式化ListView,例如如果你喜欢使用android, android.R.layout.simple_list_item_checked ,你可以在列表项旁边有复选框。
第三个是数组,数组的每个索引的值将在列表视图中使用。
答案 2 :(得分:0)
为Android编写应用程序要比在vb6中编写适用于Windows的应用程序复杂得多。你应该学习基础知识并做一些教程。开始here!
但是对于你的问题,要在代码中访问xml控件,首先你必须创建该控件的对象,例如
private Button button1;
然后通过方法findViewById()
将其与XML布局中的实际控件连接起来button1 = (Button) findViewById(R.id.your_button_id_in_xml_layout);
答案 3 :(得分:0)
与VB6没有语法上的相似之处,在Android中,发生的事情是UI元素被创建为内存中的对象层次结构。为了获得特定对象,我们使用findViewById方法,将该特定元素的id作为参数。
您可以获取列表视图。
ListView itemList = (ListView) findViewById(R.id.ItemList);
然后,
ArrayAdapter<String> myAdapter=new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
myStringArray);
下面,
android.R.layout.simple_list_item_1
未引用您的ItemList
。这适用于适配器。在ListView中,您需要有一个元素列表。
android.R.layout.simple_list_item_1 represent the template that is used to populate the list view.
然后你做了,
itemList.setAdapter(myAdapter);
由于构建失败,R发生了许多问题,在项目构建期间生成了R.要查看R的问题,是否可以使用导入添加更多Activity类的代码?