Android:为什么后续代码阻止TextView的.setText()工作

时间:2016-08-05 23:40:45

标签: java android android-studio textview settext

更新:我在调用updatePercentage后发现该代码阻止了.setText的工作。我已更新下面的代码,以显示来自button_Convert的calcAndDisplayResults调用以及calcAndDisplayResults的代码。在此呼叫正常工作之前,我将calcAndDisplayResults .setText的呼叫移除。为什么以后的代码会阻止早期代码工作?

我正在尝试使用TextView更新.setText()对象的文本,以在content_main布局上显示更新的完成百分比值(包含在activity_main布局中)。我正在通过我编写的名为updatePercentage的私有方法更新文本,当按下各种按钮时,该方法是从onClick MainActivity方法调用的。从.setText内的某些位置调用updatePercentage时,TextView可以正常工作(即更新onClick的文本),但不能从其他位置调用onClick。具体来说,它在输入TextView方法时起作用,在单击button_3时起作用,但在单击button_Convert时不起作用(即不更新updatePercentage的文本)。 button_Convert切换案例中的其他方法(在setText之后调用)可以正常工作。

我搜索了StackOverflow数据库,发现其他人有... import android.widget.TextView; ... public class MainActivity extends AppCompatActivity implements View.OnClickListener { ... private TextView percentComplete; ... @Override protected void onCreate(Bundle savedInstanceState) { final String METHOD = "Method: onCreate"; super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... percentComplete = (TextView) findViewById(R.id.textView_PercentCompleteValue); ... } ... @Override public void onClick(View view) { final String METHOD = "Method: onClick"; currentValue = valueToConvert.getText().toString(); int progressUpdate = 0; updatePercentage(progressUpdate); //This one works...text updated to 0% ArrayList<String> goodWords = new ArrayList<>(); Results_Adapter resultsAdapter = new Results_Adapter(this, goodWords); listResults.setAdapter(resultsAdapter); switch (view.getId()) { ... case R.id.button_3: valueToConvert.setText(String.format(Locale.US, "%s%s", currentValue, "3")); progressUpdate = 3; updatePercentage(progressUpdate); //This one works...text updated to 3% break; ... case R.id.button_Convert: progressUpdate = 20; updatePercentage(progressUpdate); //This one doesn't work...text stays 0% or 3%, depending if I've clicked button_3 first calcAndDisplayResults(); //If I remove the call to this method, the code for updatePercentage works ???? break; } } private void calcAndDisplayResults (){ final String METHOD = "Method: calcAndDisplayResults"; ArrayList<String> goodWords = new ArrayList<>(); currentValue = valueToConvert.getText().toString(); goodWords = convertNumbersToWords(currentValue); if (goodWords.size() == 0) { goodWords.add("<No equivalent words!>"); } Results_Adapter resultsAdapter = new Results_Adapter(this, goodWords); listResults.setAdapter(resultsAdapter); } private void updatePercentage (int newPercentage){ final String METHOD = "Method: updatePercentage"; Log.v(LOG_CLASS, String.format(Locale.US, "%s; newPercentage: %d%%", METHOD, newPercentage)); this.percentComplete.setText(String.format(Locale.US, "%d%%", newPercentage)); } 个问题,但似乎都没有解决我遇到的问题。我的开发环境是Android Studio(2.1.2),包含所有已知的相关更新。我遇到了使用AVD设备Galaxy Nexus API 23的问题。我是Android / Java新手,非常感谢您的帮助。

以下是我的代码的相关部分。

MainActivity.java:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="@color/md_grey_200"
    tools:context="com.psmithe.combowords.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main"/>

</android.support.design.widget.CoordinatorLayout>

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.psmithe.combowords.MainActivity"
    tools:showIn="@layout/activity_main"
    >

    <TextView
        android:id="@+id/textView_CodeToCovert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:layout_marginEnd="50dp"
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        android:layout_marginStart="50dp"
        android:background="@drawable/textview_border"
        android:textAlignment="center"
        android:textSize="24sp"/>

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView_CodeToCovert"
        android:layout_centerHorizontal="true">

        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_gravity="center"
            android:layout_row="0"
            android:backgroundTint="@color/colorNumberKeys"
            android:clickable="true"
            android:gravity="center_vertical|center_horizontal"
            android:maxWidth="120dp"
            android:minHeight="50dp"
            android:minWidth="90dp"
            android:onClick="onClick"
            android:text="1"
            android:textSize="12sp"/>

        <Button
            android:id="@+id/button_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_gravity="center"
            android:layout_row="0"
            android:backgroundTint="@color/colorNumberKeys"
            android:clickable="true"
            android:maxWidth="120dp"
            android:minHeight="50dp"
            android:minWidth="90dp"
            android:onClick="onClick"
            android:text="2\n(A B C)"
            android:textSize="12sp"/>

        <Button
            android:id="@+id/button_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="2"
            android:layout_gravity="center"
            android:layout_row="0"
            android:backgroundTint="@color/colorNumberKeys"
            android:clickable="true"
            android:maxWidth="120dp"
            android:minHeight="50dp"
            android:minWidth="90dp"
            android:onClick="onClick"
            android:text="3\n(D E F)"
            android:textSize="12sp"/>

        ...

        <Button
            android:id="@+id/button_Convert"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_column="0"
            android:layout_columnSpan="100"
            android:layout_row="4"
            android:backgroundTint="@color/colorConvertKey"
            android:clickable="true"
            android:onClick="onClick"
            android:text="Convert To Words"
            android:textColor="@color/abc_primary_text_material_dark"/>

    </GridLayout>

    <LinearLayout
        android:id="@+id/linearLayout_percentComplete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/gridLayout"
        android:layout_centerHorizontal="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView_percentCompleteLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Percent Complete:"/>

        <TextView
            android:id="@+id/textView_PercentCompleteValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text=""/>
    </LinearLayout>

    <ListView
        android:id="@+id/listView_EquivalentWords"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout_percentComplete"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:background="@color/colorListViewBackground"/>

</RelativeLayout>

content_main.xml:

{{1}}

2 个答案:

答案 0 :(得分:0)

尝试在@override方法之前删除onClick(View view),并且您不需要实施View.OnClickListener(在AppCompatActivity之后)。原因是您已经在xml文件中为按钮定义了onClickListener,即对于button_Convert,有一行android:onClick="onClick"表示如果单击此按钮,它将调用方法onClick

答案 1 :(得分:0)

您的setText()似乎已被覆盖。

如果您尝试延迟发布calcAndDisplayResults方法,您是否看到正确的百分比值闪烁?