Как добавить строки в TextView / ScrollView? - PullRequest
0 голосов
/ 25 марта 2019

Я тихий новичок в разработке Android извините!

Я хочу добавить значения доктора как строки (имя, фамилию и некоторые другие позже) как одну запись (я пытался сделать это с объектами) в моем представлении прокрутки с помощью кнопки. Я знаю, что для этого мне нужны макет и текстовое представление, но моя виртуальная машина не работает. Насколько я понимаю, я должен поместить свое текстовое представление (со строками) в макет, а макет в виде прокрутки (я не прав?).

Я пробовал несколько вещей с разных веб-сайтов, которые все предлагают похожие решения, но пока ничего не получалось. Я использую Android 6.0 с Android Studio и разработал свой пользовательский интерфейс с помощью Design View и адаптировал некоторый код в файлах 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);
}

Я ожидал, что строки объекта появятся в представлении прокрутки, но в журнале ошибок говорится, что «ScrollView может содержать только одного прямого потомка», который я пытался исправить с помощью оператора if, но, похоже, он не влияет на мой код .

Не могли бы вы помочь мне с этим. Я что-то пропустил?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 25 марта 2019

Насколько я понимаю, я должен поместить свое текстовое представление (со строками) в макет, а макет в виде прокрутки (я не прав?).

ВыЯ прав.

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

Как правильно добавить доктора

В журнале ошибок говорится, что «ScrollView может содержать только одного прямого ребенка»

Youвы получаете ошибку, потому что вы уже добавили линейный макет внутри <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);
    }

}
0 голосов
/ 25 марта 2019

Почему бы вам не использовать RecyclerView? И тогда вам не нужен ScrollView. И не вызывайте setContentView (view); кратный раз. Вы должны сделать только 1 раз.

0 голосов
/ 25 марта 2019

вам нужно создать Multiline 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>
0 голосов
/ 25 марта 2019

удалить setContentView(view); в конце, вы уже установили этот макет в первой строке

setContentView в большинстве случаев вызывается один раз, внутри onCreate метода. если вы звоните setContentView несколько раз, вы в основном отменяете предыдущий

также это

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

не требуется, вы создаете новую строку TextView выше, у нее не будет родителя для shure

...