我有main.xml
布局和其他布局other.xml
,其中包含多个子元素(TextView, ImageView
)。我想要做的是动态添加到main.xml
作为可滚动列表other.xml
元素。实际上做到这一点我使用循环:
LayoutInflater layoutInflaterInstance = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view;
View insertPoint = findViewById(R.id.linearLayoutToKeepOtherLayouts);
for (int i = 0; i < numberOfOtherXmlLayouts; i++) {
view = layoutInflaterInstance.inflate(R.layout.otherXml, null);
TextView firstValueOfOtherXml = (TextView) view.findViewById(R.id.first);
TextView secondValueOfOtherXml = (TextView) view.findViewById(R.id.second);
ImageView thirdValueOfOtherXml = (ImageView) view.findViewById(R.id.third);
firstValueOfOtherXml = setContent();
secondValueOfOtherXml = setContent();
thirdValueOfOtherXml = setContent();
((ViewGroup) insertPoint).addView(view, i, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
}
这是我向现有main.xml添加动态内容的方法。现在我想在firstValueOfOtherXml / secondValueOfOtherXml / thirdValueOfOtherXml中添加一些活动,我尝试在TextView / ImageView中的onClick
中设置other.xml
事件,如下所示(在上面循环):
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.otherXmlID);
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
setContentView(R.layout.otherXml);
Intent myIntent = new Intent(getApplicationContext(), OtherActivity.class);
startActivityForResult(myIntent, 0);
}
};
relativeLayout.setOnClickListener(clickListener);
不幸的是,它仅适用于添加到other.xml
的第一个main.xml
布局。我认为问题在于添加了other.xml
的ID,我没有动态地改变它(可能在for循环中根据i
)。我希望在任何解决方案中添加动态布局元素与其子元素的dinamically更改ID,以使其识别成为可能。
希望它足够清楚。 谢谢你的帮助。
答案 0 :(得分:0)
你误解了android项目的模式: 活动是每件事情发生的环境。每个Activity都有它的视图,可以使用setContentView进行设置,因此当您使用setContentView时,实际上是在设置当前活动的视图。
你要做的第一件事是启动一个Activity(这是全局上下文),然后你在Activity中做你需要做的任何工作
所以你应该像你一样开始新的活动:
@Override
public void onClick(View v) {
Intent myIntent = new Intent(getApplicationContext(), OtherActivity.class);
startActivityForResult(myIntent, 0);
}
在您的OtherActivity类的onCreate方法中,您应该将setContentView设置为要应用于新当前活动的任何布局xml文件。
Xml文件仅用于描述视图。(实际上,您可以使用Java来执行此操作)
答案 1 :(得分:0)
由于我对活动“模式”的误解,YAT的回答被接受了。我的问题的解决方案(切换到其他活动填充layout.xml与适当的数据)是在RelativeAayout上使用onClick =“switchToWeekWeather”与WeatherActivity.java类中的:
public void switchToWeekWeather(View view){
TextView cityNameTextView = (TextView) ((RelativeLayout) view).getChildAt(1);
Intent myIntent = new Intent(getApplicationContext(), CityWeatherActivity.class);
String cityName = cityNameTextView.getText().toString();
myIntent.putExtra("name", cityName);
startActivity(myIntent);
}
在CityWeatherActivity.java中:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
String value = "";
if (extras != null) {
value = extras.getString("name");
}
LinearLayout cityView = (LinearLayout) getLayoutInflater().from(this).inflate(R.layout.cityview, null);
TextView cityTextView = (TextView) cityView.findViewById(R.id.cityName);
cityTextView.setText(value);
setContentView(cityView);
}
public void backToMain(View view) {
Intent myIntent = new Intent(getApplicationContext(), WeatherActivity.class);
startActivity(myIntent);
}