【发布时间】:2014-06-08 18:50:42
【问题描述】:
更新:已解决,问题出在我的 activity_main.xml 我已经更新了下面的代码以反映我所做的更改。
我将再发一篇文章更新我的 .java 文件,使用正确的方法来处理没有 ScrollView 的文本滚动,如 deadember 所述。
更新:
我更改了注释行 this.terminal.append("Button# clicked...\n"); 并添加了 this.terminal.setText("Button# clicked..."); ,其行为符合预期,并在每次按下按钮时更改文本,没有问题。
有了这个我知道我的 buttonClicked 方法被调用了,但是文本没有被附加到 TextView 中,有什么建议可以解决这个问题吗?
我查看了其他遇到此问题的帖子,但所有解决方案似乎都是针对他们的应用程序的。
我在 ScrollView 中有一个 TextView,以提供类似于终端的行为,带有 4 个按钮,当单击时将文本附加到 TextView,表示它们已被单击。
但是,我只收到一次点击事件。我可以点击任何按钮,它显示点击了正确的按钮,但应用程序不会注意到任何后续点击。
我的 Android Activity Main .java
package com.drj.pokemonar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView terminal;
ScrollView terminalSView;
Button button1;
Button button2;
Button button3;
Button button4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.terminal = (TextView) findViewById(R.id.outputTerminal);
this.terminalSView = (ScrollView) findViewById(R.id.outputScrollView);
this.button1 = (Button) findViewById(R.id.button1);
this.button2 = (Button) findViewById(R.id.button2);
this.button3 = (Button) findViewById(R.id.button3);
this.button4 = (Button) findViewById(R.id.button4);
// Necessary to bring the view to the bottom when
// a new line is appended.
this.terminalSView.post(new Runnable() {
@Override
public void run() {
ScrollView sView = (ScrollView) findViewById(R.id.outputScrollView);
sView.fullScroll(View.FOCUS_DOWN);
}
});
}
// Defines the buttons behavior when clicked.
public void buttonClicked(View v)
{
switch (v.getId())
{
case R.id.button1:
{
this.terminal.append("Button1 clicked...\n");
break;
}
case R.id.button2:
{
this.terminal.append("Button2 clicked...\n");
break;
}
case R.id.button3:
{
this.terminal.append("Button3 clicked...\n");
break;
}
case R.id.button4:
{
this.terminal.append("Button4 clicked...\n");
break;
}
default:
{
break;
}
}
}
}
我的 Android Activity Main .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"
tools:context="${packageName}.${activityClass}" >
<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_alignParentTop="true"
android:orientation="vertical" >
<ScrollView
android:id="@+id/outputScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<TextView
android:id="@+id/outputTerminal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
</ScrollView>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button"
android:onClick="buttonClicked" />
<Button
android:id="@+id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button"
android:onClick="buttonClicked" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button"
android:onClick="buttonClicked" />
<Button
android:id="@+id/button4"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button"
android:onClick="buttonClicked" />
</TableRow>
</TableLayout>
</LinearLayout>
</RelativeLayout>
我不确定为什么会这样。任何建议表示赞赏。
【问题讨论】:
-
如果先点击按钮1再点击按钮2,是否都添加到终端了?
-
设置焦点向下滚动可能会将焦点从按钮拉到滚动视图本身?尝试删除您的可运行部分,然后看看会发生什么。 (只是为了测试)。
-
@MaxMeijer 不,不会添加后续按钮。如果我单击button2,它会正确显示它已被单击。然后点击button1,什么都没有。无论单击哪个按钮,都会发生同样的事情。只有第一次点击由监听器处理。
-
@zgc7009 我会尝试一下然后回复你。编辑:我注释掉那段代码没有影响。行为保持不变,只是它不会向下滚动。
-
更新,每次按下按钮都会调用 buttonClicked 方法,但是 TextView 不会附加文本。我通过在 TextView 上调用 setText 而不是 append 对此进行了测试,它按预期工作。不知道从这里做什么。
标签: java android onclick onclicklistener android-button