【问题标题】:Android TextView in ScrollView not working- Force CloseScrollView 中的 Android TextView 不起作用 - 强制关闭
【发布时间】:2012-02-10 20:24:20
【问题描述】:

我正在尝试创建一个能够滚动大量文本的文本视图。我将它嵌套在滚动视图中,并在尝试测试它时强制关闭我的手机和平板电脑。当我在没有滚动视图的情况下运行时,它可以工作,但显然不会滚动。这是我的 XML 文件中用于布局的内容:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:scrollbars="horizontal" android:isScrollContainer="true">    
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:orientation="vertical" >

   <TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/tutView">

   </TextView>
 </LinearLayout>
</ScrollView>

编辑:LogCat 信息:

02-10 14:51:44.402: W/dalvikvm(5948): threadid=1: thread exiting with uncaught exception (group=0x40a3c1f8)
02-10 14:51:44.414: E/AndroidRuntime(5948): FATAL EXCEPTION: main
02-10 14:51:44.414: E/AndroidRuntime(5948): java.lang.RuntimeException: Unable to start activity ComponentInfo{rg.ah/rg.ah.TutViewerActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.os.Looper.loop(Looper.java:137)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at java.lang.reflect.Method.invokeNative(Native Method)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at java.lang.reflect.Method.invoke(Method.java:511)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at dalvik.system.NativeStart.main(Native Method)
02-10 14:51:44.414: E/AndroidRuntime(5948): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.view.ViewGroup.addViewInner(ViewGroup.java:3337)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.view.ViewGroup.addView(ViewGroup.java:3208)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.view.ViewGroup.addView(ViewGroup.java:3188)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:260)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.Activity.setContentView(Activity.java:1855)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at rg.ah.TutViewerActivity.onCreate(TutViewerActivity.java:25)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.Activity.performCreate(Activity.java:4465)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
02-10 14:51:44.414: E/AndroidRuntime(5948):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
02-10 14:51:44.414: E/AndroidRuntime(5948):     ... 11 more
02-10 14:51:44.496: D/dalvikvm(5948): GC_CONCURRENT freed 192K, 4% free 9285K/9607K, paused 2ms+9ms

编辑 2:为有问题的错误添加了我的 onCreate。这会获取在主视图的列表中被触摸的项目,并在文本视图中显示该项目以及更多信息。

public class TutViewerActivity  extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.textview);

    Intent launchingIntent = getIntent();
    String content = launchingIntent.getData().toString();

    TextView viewer = (TextView) findViewById(R.id.tutView);
    viewer.setMovementMethod(new ScrollingMovementMethod());
    viewer.setText(Html.fromHtml(content));

    setContentView(viewer);
}
}

【问题讨论】:

  • 如果多行 TextView 包含的文本超出其显示范围,它将滚动。
  • LogCat 强制关闭时会说什么?
  • 你知道......强制关闭意味着错误......那么 logcat 输出在哪里?
  • 为大家添加了 LogCat。
  • 我也尝试过使用多行输入类型的android:inputType 并且不滚动,只是在尝试滚动时使屏幕变暗...

标签: android textview scrollview forceclose


【解决方案1】:

异常告诉你IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first

这意味着您尝试将已经有父视图的视图放入另一个视图中。

确保你没有setContentView(R.id.tutView) 或类似的东西。

如果您的布局 xml 的名称是 main.xml,那么正确的做法是 setContentView(R.layout.main)

编辑

你为什么写这行? setContentView(viewer); 这是怎么回事。

您已经将它的父级设置为内容视图,删除它就可以了。

【讨论】:

  • @Rekar 是的,错误出在 onCreate 而不是 XML 中。它甚至告诉你at rg.ah.TutViewerActivity.onCreate(TutViewerActivity.java:25 所以第 25 行。我和 Rotemmiz 在一起,很可能是你的 setContentView()
  • 对不起,我花了这么长时间。我添加了未经编辑的有问题的代码供您查看。我所做的不是将文本视图放入滚动视图,而是将其保留在顶层并添加了setMovementMethod 代码以允许文本滚动作为临时修复。我仍然对修复我以前的代码非常感兴趣。
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多