在我的MainActivity
中,如果我导入:
import kotlinx.android.synthetic.main.activity_main.*
我可以简单地找到我的ListView
并像这样设置onItemClickListener
:
list_view.onItemClickListener
但是在非活动课程中我该怎么做?
编辑:
fun setListViewElements() {
list_view.adapter = arrayAdapter
list_view.onItemClickListener = AdapterView.OnItemClickListener {}
}
答案 0 :(得分:0)
如here所述;
您必须通过构造函数传递Context引用。
public class ClassB {
Context context;
public ClassB(Context context){
this.context=context;
}
public void Update(){
TextView txtView = (TextView) ((Activity)context).findViewById(R.id.text);
txtView.setText("Hello");
}
}
答案 1 :(得分:0)
您可以像这样将listView
作为类的constuctor
参数传递:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = findViewById(R.id.listview);
ClassExample classExample = new ClassExample(listView);
}
然后:
class ClassExample {
ListView listView;
public ClassExample(ListView listView){
this.listView = listView;
}
}
希望这会有所帮助
答案 2 :(得分:0)
您可以使用findViewById
插件和kotlin-android-extensions
界面访问没有LayoutContainer
的视图。
在您的build.gradle
文件中,确保您应用了插件并设置了实验性标志:
apply plugin: 'kotlin-android-extensions'
androidExtensions {
experimental = true
}
您要从其访问list_view
的类需要实现LayoutContainer
接口。实现该接口意味着您需要提供一个容器视图,可以在其中找到您的ListView
。
现在让我们假设我们有一个用于MainActivity
的简单布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
在我们的MainActivity
中,我们将此文件与setContentView
一起使用。
现在您可以编写一个非活动但可以使用视图的类(在本示例中为TextView
),而无需使用findViewById
:
package com.example.playground
import android.view.View
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.activity_main.*
class Demo(override val containerView: View?) : LayoutContainer {
fun setTextViewText(text: String) {
text_view.text = text
}
}
该类实现LayoutContainer
(只有首先启用实验功能才有可能),因此需要提供containerView
属性,该属性是通过构造函数获取的。
现在可以使用此类,例如从一个活动中,您将需要对其进行实例化并为其提供存在text_view
的视图(在我的情况下,其ID为LinearLayout
的{{1}}):
container
如果不提供容器,将无法使用val demo = Demo(container)
demo.setTextViewText("Magic!")
-magic。因为从本质上讲,在后台发生的事情是,如果您访问kotlinx.android.synthetic
,则扩展名将执行list_view
。
在线您可以从Kotlin about the Android plugin和有关how to use the Android extensions的其他信息中找到。