从活动中更改片段的TextViews文本

时间:2017-05-14 18:20:22

标签: android

我想通过Activity更改textView的文本,但是当我更改此代码时:

Sun Jan 01 21:45:33 MST 2017

}

我收到了这个错误:

public class MainActivity extends AppCompatActivity {

private TextView txtSave;

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

    txtSave = (TextView)findViewById(R.id.txt_save);;
}

public void onClick(View v) {
    TextView txtSave;
    txtSave = (TextView)findViewById(R.id.txt_save);
    txtSave.setText("something");
}

有人可以帮助我如何动态更改? 片段代码:

05-14 13:47:46.835 21949-21949/stv.wordspower E/AndroidRuntime: FATAL EXCEPTION: main
                                                            Process: stv.wordspower, PID: 21949
                                                            java.lang.IllegalStateException: Could not execute method for android:onClick
                                                                at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                at android.view.View.performClick(View.java:4756)
                                                                at android.view.View$PerformClick.run(View.java:19749)
                                                                at android.os.Handler.handleCallback(Handler.java:739)
                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                at android.os.Looper.loop(Looper.java:135)
                                                                at android.app.ActivityThread.main(ActivityThread.java:5221)
                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                at java.lang.reflect.Method.invoke(Method.java:372)

}

textView位于ProgressFragment上。 ProgressFragment位于MainActivity的FrameLayout上。 我只是想修改TextView的值,但我不能。我尝试了这些solutions,但其中一个没有用。

其他信息:

public class ProgressFragment extends Fragment {

private View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_progress, container, false);
    return rootView;
}

public static ProgressFragment newInstance() {
    Bundle args = new Bundle();
    ProgressFragment fragment = new ProgressFragment();
    fragment.setArguments(args);
    return fragment;
}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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="stv.wordspower.MainActivity">

<TextView
    android:text="@string/txtView_welcome"
    android:textSize="30sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:id="@+id/textView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:textAlignment="center" />

<Button
    android:text="@string/btn_exit"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btn_exit"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" />

<Button
    android:id="@+id/btn_settings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/btn_settings"
    android:layout_above="@+id/btn_contact"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:id="@+id/btn_contact"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/btn_contact"
    android:layout_above="@+id/btn_exit"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:id="@+id/btn_progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textView"
    android:text="@string/btn_progress" />

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/btn_progress"
    android:layout_above="@+id/btn_settings"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:id="@+id/mainActivityFragmentLayout">
</FrameLayout>

1 个答案:

答案 0 :(得分:1)

在onClick方法中,您可以获得如下片段:

public void onClick(View v) {
    yourFrag fragment = (yourFrag)getSupportFragmentManager().findFragmentById(R.id.fragment_id);
}

并在片段中创建一个更新textView的方法,以便我们可以使用片段对象调用它,如下所示:

public void update(String s){
    textView.setText(s);
}

注意:应在片段中定义此textView。

并从主要活动中调用以下内容:

public void onClick(View v) {
    yourFrag fragment = (yourFrag)getSupportFragmentManager().findFragmentById(R.id.fragment_id);
    fragment.update("foo");
}

是的!如果您不使用支持库,只需将getSupportFragmentManager()替换为getFragmentManager()