我最近開始使用一個小型學校項目爲Android編碼。爲此,我已經有了一個帶有七個碎片的Viewpager。這些碎片包括每個TextView。當我點擊一個按鈕時,我希望這些TextViews立即改變他們的文本。在Viewpager中更改TextView的文本
爲此,我有一個用於改變文本的ToggleButton。我已經嘗試過的是在片段中有一個公共的「setText」方法,它將TextView的文本設置爲另一個方法(該方法在MainActivity中用String調用)。 但是我得到這個錯誤:非靜態方法setText(java.lang.String)不能從靜態上下文中引用。
所以,我的問題是:如何一次更改七個TextViews的文本?
這裏是我的代碼:
MainActivity:
package app.voet.kalenderversemitseneca;
import android.content.Intent;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.widget.ToggleButton;
import java.util.ArrayList;
import java.util.List;
import app.voet.kalenderversemitseneca.Fragments.FiveFragment;
import app.voet.kalenderversemitseneca.Fragments.FourFragment;
import app.voet.kalenderversemitseneca.Fragments.SevenFragment;
import app.voet.kalenderversemitseneca.Fragments.SixFragment;
import app.voet.kalenderversemitseneca.Fragments.ThreeFragment;
import app.voet.kalenderversemitseneca.Fragments.OneFragment;
import app.voet.kalenderversemitseneca.Fragments.TwoFragment;
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private Toolbar toolbar;
private ToggleButton toggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new OneFragment(), "ONE");
adapter.addFragment(new TwoFragment(), "TWO");
adapter.addFragment(new ThreeFragment(), "THREE");
adapter.addFragment(new FourFragment(), "FOUR");
adapter.addFragment(new FiveFragment(), "FIVE");
adapter.addFragment(new SixFragment(), "SIX");
adapter.addFragment(new SevenFragment(), "SEVEN");
viewPager.setAdapter(adapter);
}
public void showAboutProjectView(View view){
Intent intent = new Intent(this, aboutProjectActivity.class);
startActivity(intent);
}
public void onToggleClicked(View view) {
// Is the toggle on?
boolean on = toggleButton.isChecked();
setText(on);
}
public void setText(boolean translationOn){
if (translationOn){
Resources res = getResources();
String[] versOne = res.getStringArray(R.array.verse_1);
String[] versTwo = res.getStringArray(R.array.verse_2);
}
else {
Resources res = getResources();
String[] versOne = res.getStringArray(R.array.verse_1);
String[] versTwo = res.getStringArray(R.array.verse_2);
OneFragment.setText(versOne[0]); //here is ERROR
}
}
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
OneFragment(其它片段看起來是一樣的):
package app.voet.kalenderversemitseneca.Fragments;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import app.voet.kalenderversemitseneca.R;
public class OneFragment extends Fragment{
private TextView textView1;
public OneFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_one, container, false);
View view = inflater.inflate(R.layout.fragment_one, null);
textView1 = (TextView)view.findViewById(R.id.TV1);
return view;
}
public void setText(String text) {
textView1.setText(text);
}
}
fragment_one.xml:
<?xml version="1.0" encoding="utf-8"?>
<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="app.voet.kalenderversemitseneca.Fragments.OneFragment">
<TextView
android:id="@+id/TV1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:textStyle="bold"
android:layout_centerInParent="true"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:text="Hello" />
</RelativeLayout>
如果你找到任何我能提高別人的事,請告訴我,因爲我還處於起步階段,學習:)
謝謝
萊昂
所以,我已經將它應用於我的所有片段。文本確實發生了變化,但我認識到有三個錯誤/錯誤:1.它僅在滾動瀏覽所有片段時才起作用。然後它只改變當前片段和前一片段的文本。 3.當我然後去其他片段,他們顯示沒有文字... –