你好任何人都可以告诉我为什么这段代码会给我错误并让我的应用崩溃? 只有在重置((查看)孩子)时才会发生这种情况;'在最后添加 我想要做的是当我点击一个带有onClick的按钮时:重置,它将仅对具有更多类型的儿童的LinearLayout内的图像和文本视图应用一种重置
public void reset(View v) {
LinearLayout items = (LinearLayout) findViewById(R.id.itemsToSearch);
for (int i = 0; i < items.getChildCount(); i++)
{
Object child = items.getChildAt(i);
Context context = getApplicationContext();
CharSequence text = child.toString();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
if (child instanceof ImageView)
{
((ImageView) child).setVisibility(View.INVISIBLE);
}
else if (child instanceof TextView)
{
((TextView) child).setTextColor(Color.parseColor("#98868A"));
}
else if(child instanceof ViewGroup)
{
reset((View) child);
}
}
}
另一个问题是我的应用程序可以使用FragmentPagerAdapter,例如,如果我单击Frag#1中的一个按钮,它将更改当前未显示的Frag#3内的文本?对我而言,它总是如此崩溃,正如我所看到的那样是因为片段#3或屏幕外的任何其他碎片尚未加载到屏幕上,因此它不会伪造指定的ID
谢谢
答案 0 :(得分:0)
您的重置方法已损坏。您没有使用作为参数传递给该方法的视图,您始终在搜索相同的LinearLayout。您的代码应如下所示:
public void reset(ViewGroup viewGroup) {
final int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = viewGroup.getChildAt(i);
if (child instanceof ImageView) {
((ImageView) child).setVisibility(View.INVISIBLE);
} else if (child instanceof TextView) {
((TextView) child).setTextColor(Color.parseColor("#98868A"));
} else if(child instanceof ViewGroup) {
// recursive call
reset((ViewGroup) child);
}
}
}
关于您的其他问题,只有当前片段和任何一方(在屏幕外页面限制内,默认情况下为1)实际加载并处于可以操纵其视图的状态。您需要在某处存储一些数据,并在您想要的页面(示例中为片段#3)实例化并开始将数据加载到该页面时返回该数据。