Android activity 在充气机循环过程中停止
Android activity getting halt during loop with inflator
我的代码运行得非常好。但问题是,在我从网络服务收到数据后。当我启动用于创建多行的循环时,我的 Activity 会暂停 5 到 10 秒。服务最多可接收记录数不超过100条
我该如何解决这个问题?在不停止我的 activity 的情况下,它应该会生成多条记录。因为我已经有几条记录要迭代了。
LinearLayout parentLayout = (LinearLayout)findViewById(R.id.sheet);
LayoutInflater layoutInflater = getLayoutInflater();
View view;
JSONArray receivedData = (JSONArray) json.get("RESPONSE_DATA");
for(int i=0; i<receivedData.length(); i++){
view = layoutInflater.inflate(R.layout.row, parentLayout, false);
((TextView)view.findViewById(R.id.title1)).setText( (((JSONObject)receivedData.getJSONObject(i)).get("title1")).toString() );
((TextView)view.findViewById(R.id.title2)).setText( (((JSONObject)receivedData.getJSONObject(i)).get("title2")).toString() );
ToggleButton button = (ToggleButton)view.findViewById(R.id.button);
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
View parentView = (View)buttonView.getParent();
if(isChecked){
parentView.setBackgroundColor(0x00000000);
}else{
parentView.setBackgroundColor(0xffDF9292);
}
}
});
parentLayout.addView(view);
}
这里是使用适配器的好地方。
有关详细信息,请参阅 Android 开发人员的 this link。
您 activity 可能会停止,因为您在 UI 线程上做了太多工作。我还可以想象,由于目前有太多 UI 对象处于活动状态,它会变得迟缓。当您使用带有适配器的列表时,所有这些都会得到解决。
[编辑]
我认为 this tutorial from Vogella 可能是一个更好的起点。
activity 暂停是因为您 运行 您的代码在主 activity 线程上。我建议你使用一些异步的东西,尝试在 AsyncTask 中实现你的代码(但在 onPostExecute 中附加视图)。
另一种方法是添加一个 ListView 并使用自定义 ArrayAdapter 加载数据,this is an example .
希望对你有所帮助
我的代码运行得非常好。但问题是,在我从网络服务收到数据后。当我启动用于创建多行的循环时,我的 Activity 会暂停 5 到 10 秒。服务最多可接收记录数不超过100条
我该如何解决这个问题?在不停止我的 activity 的情况下,它应该会生成多条记录。因为我已经有几条记录要迭代了。
LinearLayout parentLayout = (LinearLayout)findViewById(R.id.sheet);
LayoutInflater layoutInflater = getLayoutInflater();
View view;
JSONArray receivedData = (JSONArray) json.get("RESPONSE_DATA");
for(int i=0; i<receivedData.length(); i++){
view = layoutInflater.inflate(R.layout.row, parentLayout, false);
((TextView)view.findViewById(R.id.title1)).setText( (((JSONObject)receivedData.getJSONObject(i)).get("title1")).toString() );
((TextView)view.findViewById(R.id.title2)).setText( (((JSONObject)receivedData.getJSONObject(i)).get("title2")).toString() );
ToggleButton button = (ToggleButton)view.findViewById(R.id.button);
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
View parentView = (View)buttonView.getParent();
if(isChecked){
parentView.setBackgroundColor(0x00000000);
}else{
parentView.setBackgroundColor(0xffDF9292);
}
}
});
parentLayout.addView(view);
}
这里是使用适配器的好地方。 有关详细信息,请参阅 Android 开发人员的 this link。
您 activity 可能会停止,因为您在 UI 线程上做了太多工作。我还可以想象,由于目前有太多 UI 对象处于活动状态,它会变得迟缓。当您使用带有适配器的列表时,所有这些都会得到解决。
[编辑]
我认为 this tutorial from Vogella 可能是一个更好的起点。
activity 暂停是因为您 运行 您的代码在主 activity 线程上。我建议你使用一些异步的东西,尝试在 AsyncTask 中实现你的代码(但在 onPostExecute 中附加视图)。 另一种方法是添加一个 ListView 并使用自定义 ArrayAdapter 加载数据,this is an example .
希望对你有所帮助