Android Studio(引用对象)

时间:2015-08-31 00:59:52

标签: java android debugging reference

一名前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'”的错误。

请问有人可以告诉我吗?

感谢!!!

4 个答案:

答案 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类的代码?