我有一个附带main.xml的简单Activity。 main.xml有一个自定义布局(customLinearLayout)和一个简单的TextView。自定义布局还有自己的布局文件(linearlayout.xml)和一个简单的Button。这个布局正确地被课程夸大了。
linearlayout.xml中的Button应该更改main.xml中textView的文本,但我无法访问该textView。我究竟做错了什么?我也不能给main.xml充气。
这是customLinearLayout:
public class CustomLinearLayout extends LinearLayout {
LayoutInflater mInflater;
View ContainerView;
Button button1;
TextView tv;
public CustomLinearLayout(Context context) {
super(context);
// TODO Auto-generated constructor stub
init();
}
public CustomLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}
private void init() {
mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ContainerView = mInflater.inflate(R.layout.linearlayout, this, true);
button1 = (Button) ContainerView.findViewById(R.id.button1);
// trying to get the TextView from main.xml
tv = (TextView) ContainerView.findViewById(R.id.textview1); // doesn't work
// these tries doesn't work either
//tv = (TextView) ContainerView.getRootView().findViewById(R.id.textview);
//tv = (TextView) this.getRootView().findViewById(R.id.textview);
//tv = (TextView) this.findViewById(R.id.textview);
button1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(tv != null)
tv.setText("works");
else
Log.d("CustomLinearLayout", "TextView not found");
}
});
}
}
layout-file(linearlayout.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="press" />
</LinearLayout>
活动:
public class TestLayoutViewsv2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
活动的main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<test.layoutviewsv2.CustomLinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
答案 0 :(得分:2)
方法findViewById
是作用域的 - 您的自定义视图在内部查找不存在的文本字段。但那没关系!你的观点应该是他们自己的小世界 - 他们不应该对外面的世界了解任何事情。可悲的是,你将不得不改变你的设计以适应这种情况(比如对活动的回调,也许)让你做你想做的事。
答案 1 :(得分:0)
您正在以错误的方式使用inflate方法。如果您正在扩展视图,则无需夸大布局。 inflate方法用于初始化新视图,而无需自己创建新实例。我没有得到你想要做的事情,但你可以使用include来重用你的一些布局。查看此信息以获取更多信息http://developer.android.com/resources/articles/layout-tricks-merge.html