我将一个由LayoutInflater夸大的视图添加到一个布局中,然后我更改了该视图的背景颜色,例如,红色变为蓝色。之后,我添加了一个新的视图,用相同的xml文件充气,进入相同的布局,但我得到一个背景颜色为蓝色的视图,而不是原始颜色红色。 这是测试代码:
public class InflateActivity extends Activity{
private LinearLayout mContainer;
private View view;
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.inflate_test);
mContainer = (LinearLayout)findViewById(R.id.inflate_container);
findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view = LayoutInflater.from(InflateActivity.this).inflate(R.layout.expanded_record,mContainer,false);
mContainer.addView(view,2);
}
});
findViewById(R.id.change_color).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view.setBackgroundColor(Color.BLUE);
}
});
}
}
我通过view.toString()得到了不同的id。 我无法弄清楚为什么。 我想知道为什么我对视图A进行了一些更改,并且使用相同的xml文件进行膨胀的视图B将受到这些更改的影响。 实际上,我对视图A进行了很多更改,但只有setBackgroundColor()会影响视图B. xml文件的根视图是FrameLayout.Other布局,如LinearLayout,RelativeLayout不会出现问题
答案 0 :(得分:3)
我通过创建项目来检查您的代码。我正在使用Android Studio。我没有发现你提到的任何问题。只需查看我的代码并尝试相应地更改您的代码。
MainActivity:
public class MainActivity extends Activity {
private LinearLayout mContainer;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer = (LinearLayout)findViewById(R.id.inflate_container);
findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.expanded_record,mContainer,false);
mContainer.addView(view,mContainer.getChildCount());
}
});
findViewById(R.id.change_color).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view.setBackgroundColor(Color.BLUE);
}
});
}
主XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<LinearLayout
android:id="@+id/inflate_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="20dp">
<TextView
android:text="add" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/add"
android:clickable="true"/>
<TextView
android:id="@+id/change_color"
android:clickable="true"
android:text="change_color" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
和我正在膨胀的XML
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="10dp"
android:background="#000000"
android:layout_gravity="center">
</View>
这是我得到的结果
看到我可以添加黑色视图并将其更改为蓝色,然后再将其更改为黑色
答案 1 :(得分:0)
;背景将为蓝色。如果要在添加新视图时将其更改为红色,则需要更改
findViewById(R.id.change_color).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setBackgroundColor(Color.BLUE);//changes this view which clicked to blue
}
});
答案 2 :(得分:0)
从上面提供的代码段开始,因为您在添加时使用相同的膨胀视图,因此在添加时第二次查看背景为蓝色。如果要添加具有所有默认值的视图(您正在使用的布局“expanded_record.xml”),则必须在添加第二次时再次对其进行充气。简而言之,您应该使用默认条件来扩充“expanded_record.xml”次,您可以根据自己的要求对每个实例进行更改。
view1 = LayoutInflater.from(InflateActivity.this).inflate(R.layout.expanded_record,mContainer,false);
mContainer.addView(view1,2);
view2 = LayoutInflater.from(InflateActivity.this).inflate(R.layout.expanded_record,mContainer,false);
mContainer.addView(view2,3);