如何将字符串添加到TextView / ScrollView?

时间:2019-03-25 12:30:37

标签: java android textview scrollview

我对android感到很陌生,对不起!

我想通过按钮将医生值作为一个条目(我尝试使用对象)添加为字符串(名字,姓氏,以及其他一些以后的名称)作为我的滚动视图。我知道我需要布局和文本视图,但是我的虚拟机崩溃了。 据我了解,我必须将文本视图(带有字符串)放在布局中,将布局放在滚动视图中(我错了吗?)。

我正在尝试从不同的网站进行一些操作,这些网站都提供了类似的解决方案,但到目前为止没有任何效果。我在Android Studio中使用Android 6.0,并通过“设计视图”设计了UI,并在XML文件中修改了一些代码。

public void addDoctor(View view) {

    setContentView(R.layout.activity_main);
    // standard java class Doctor
    Doctor doc = new Doctor("Foo", "Boo");

    // this is the ScrollView I generated with the design
    ScrollView sv = (ScrollView) this.findViewById(R.id.ScrollViewDoctor);
    TextView tv = new TextView(this);
    // trying to fix the parent problem here
    if(tv.getParent() != null) {
        ((ViewGroup)tv.getParent()).removeView(tv); // <- fix
    }
    //this should be "Foo"
    tv.setText(doc.getDocName());

    // this is the layout I generated with the design "linlay"
    LinearLayout ll = (LinearLayout) this.findViewById(R.id.linlay);
    sv.addView(ll);

    //only one child object! -> in the error log
    ll.addView(tv);
    setContentView(view);
}

我希望对象的字符串出现在Scroll View中,但是错误日志显示“ ScrollView只能容纳一个直接子对象”,我试图用if语句修复它,但是它似乎不会影响我的代码

您能帮我吗?我想念什么吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

最后删除setContentView(view);,您已经在第一行中设置了此布局

在大多数情况下,

setContentView应该在onCreate方法内部被调用一次。如果您多次拨打setContentView,则基本上是在滥用上一个

也是这个

if(tv.getParent() != null) {
    ((ViewGroup)tv.getParent()).removeView(tv); // <- fix
}

是不必要的,您要在上方创建新的TextView行,它不会有父级消息

答案 1 :(得分:0)

您为什么不使用RecyclerView?然后,您不需要ScrollView。并且不要调用setContentView(view);多次。您只需要做1次。

答案 2 :(得分:0)

您需要创建多行TextView

<ScrollView
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:layout_marginLeft="15dp"
       android:layout_marginRight="15dp"
       android:layout_marginTop="20dp"
       android:fillViewport="true">

       <TextView
           android:id="@+id/txtquestion"
           android:layout_width="fill_parent"
           android:layout_height="match_parent"
           android:background="@drawable/abs__dialog_full_holo_light"
           android:lines="20"
           android:scrollHorizontally="false"
           android:scrollbars="vertical"
           android:textSize="15sp" />

   </ScrollView>

答案 3 :(得分:0)

  

据我所知,我必须将文本视图(带有字符串)放在布局中,将布局放在滚动视图中(我错了吗?)。

您是对的。

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

如何以正确的方式添加医生

  

错误日志显示“ ScrollView只能容纳一个直子”

出现错误是因为您已经在<ScrollView>内添加了线性布局,因此不必调用sv.addView(ll);,因为它已经在内部了(而且您不能在其中添加多个布局标准ScrollView)

因此,您引用的ScrollView没用。

如果您是xml,则是这样的:

<ScrollView>
    <LinearLayout>

    </LinearLayout>
</ScrollView>

您可以通过以下方法实现结果:

public class MyActivityDoctors extends Activity {

    ScrollView sv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sv =  (ScrollView) this.findViewById(R.id.ScrollViewDoctor);
    }

    public void addDoctor(Doctor doctor)
    {
        //Linear Layout inside your ScrollView
        LinearLayout ll = (LinearLayout) this.findViewById(R.id.linlay);

        //Create a new TextView with doctor data
        TextView tv = new TextView(this);
        tv.setText(doctor.getDocName());

        //Adding textView to LinearLayout
        ll.addView(tv);
    }

}