【问题标题】:Creating new TextView isn't working创建新的 TextView 不起作用
【发布时间】:2013-08-30 20:47:19
【问题描述】:

我有一个 Spinner、EditText 和一个按钮。当我在 EditText 中输入内容然后单击按钮时,我希望它根据选择的微调器上的项目创建一个新的 TextView。

按钮点击方法:

public void submitScore(View v){
    final int position = playerList.getSelectedItemPosition();
    EditText input = (EditText) findViewById(R.id.editText1);

    createNewTextView (players.get(position) + input);
}

createNewTextView():

private TextView createNewTextView (String text){
    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    final TextView newTextView = new TextView(this);

    newTextView.setLayoutParams(lparams);
    newTextView.setText(text);
    return newTextView;
}

整个 XML 代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Igra" >

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/editText1"
    android:orientation="vertical" >

</LinearLayout>

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/spinner1"
    android:layout_toLeftOf="@+id/button1"
    android:layout_toRightOf="@+id/textView1"
    android:ems="10" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/button1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/editText1"
    android:layout_alignParentRight="true"
    android:text="Enter"
    android:onClick="submitScore" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/editText1"
    android:layout_alignBottom="@+id/editText1"
    android:layout_alignParentLeft="true"
    android:text="Score:" />

如您所见;我在这个活动中既有相对布局也有线性布局,它们是分开的(线性布局在相对布局下)。

我希望将这个 TextView 添加到 LinearLayout 中,但它没有添加到任何地方,当我按下按钮时我看不到它。

我现在的代码:

public void submitScore(View v){
    LinearLayout lLayout = (LinearLayout) findViewById (R.id.linearLayout);
    final int position = playerList.getSelectedItemPosition();
    EditText input = (EditText) findViewById(R.id.editText1);

    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    final TextView newTextView = new TextView(this);
    newTextView.setLayoutParams(lparams);
    newTextView.setText(players.get(position) + input);

    //createNewTextView (players.get(position) + input);
    lLayout.addView(newTextView);
}

结果:

【问题讨论】:

    标签: java android eclipse textview


    【解决方案1】:

    submitScore() 上,您正在创建TextView,但没有将其添加到LinearLayout

    给你LinearLayout 一个android:id 值,然后在submitScore() 上,获取它的引用并调用LinearLayoutadd() 方法来添加从createNewTextView () 返回的值

    【讨论】:

    • 我这样做了,请检查我添加的代码和屏幕截图。现在添加了文本视图,但这不是我想要的。知道有什么问题吗?谢谢你的回答!
    • @Matthew 你不应该打电话给newTextView.setText(players.get(position) + input.getText());吗?另外,如果您在LinearLayout 中添加了很多Views,当它已满时,新的Views 将不会出现。您可能需要ScrollView
    • 感谢您提醒我有关 getText() 的信息,完全忘记了这一点。我已经添加了滚动视图,就在打开这个问题之后:) 谢谢你的回答,但我已经接受了另一个,因为他给了我最终的解决方案,但我会支持你的:)
    【解决方案2】:

    您没有看到您创建的任何 textView,因为您没有将它们中的任何一个添加到您的布局中。 (据我从你提供的信息中看到的)

    为您的 linearLayout 提供一个 id,然后在您的 submitScore() 方法中通过 id 获取您的布局,然后将您的 editText 添加到您通过 createNewTextView() 方法创建的布局中。

    <LinearLayout
    android:id="@+id/myTextViewContainer"
    ...
    >
    </LinearLayout>
    
    
    public void submitScore(View v){
       ....
       TextView newTextView = createNewTextView (players.get(position) + input);
       LinearLayout myTextViewContainer=(LinearLayout)findViewById(R.id.myTextViewContainer);
       myTextViewContainer.addView(newTextView);
    }
    

    【讨论】:

    • 嘿,我就是这样做的(查看我编辑的帖子以查看新代码和屏幕截图)。现在添加了文本视图,但这不是我想要的。知道有什么问题吗?
    • 我不小心删除了我的答案对不起:) 我认为使用“final LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);”解决了你的问题。
    【解决方案3】:

    你为什么不从 xml 中创建一个 textview 并使其不可见

    textView.setVisibility(View.INVISIBLE);
    

    然后,当您选择某些内容时,它会显示所需的文本..

    private TextView createNewTextView (String text){
        textView.setVisibility(View.VISIBLE);
        textview.setText(text);
    }
    

    【讨论】:

    • 因为我不知道用户会添加多少个文本视图。数量不限。
    • 哦 x.x 抱歉我不知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多