-1

フラグメント内のテキストビューを別のアクティビティから更新しようとしています。しかし、setTextメソッドを呼び出すときにNUllPointerExceptionが発生します。私は以下を試しましたが、まだNPEを取得しています。 1.アクティビティでFindViewbyIdを使用してフラグメントtextviewにアクセスしようとしました。 2.断片でメソッドを使用して活動からそれを呼び出すとAndroid:アクティビティのFragmentのテキストビューを更新できません。 NullPointerException

FragHomeアクティビティ

public class FragHome extends AppCompatActivity implements TabLayout.OnTabSelectedListener { 

Handler bluetoothIn; 
private static TextView tmpF, humF, CoF; 
String tempGL, HumGL, coGL, devname; 
double dblTemp, dblCo; 
final int handlerState = 0; // used to identify handler message 
private BluetoothAdapter btAdapter = null; 
private TabLayout tabLayout; 
private ViewPager viewPager; 

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

    //Adding toolbar to the activity 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    //Initializing the tablayout 
    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
    //Initializing viewPager 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    //Adding the tabs using addTab() method 
    tabLayout.addTab(tabLayout.newTab().setText("Temperature")); 
    tabLayout.addTab(tabLayout.newTab().setText("Humidity")); 
    tabLayout.addTab(tabLayout.newTab().setText("CO")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    //Creating our pager adapter 
    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount()); 

    //Adding adapter to pager 
    viewPager.setAdapter(adapter); 
    viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    //Adding onTabSelectedListener to swipe views 
    tabLayout.setOnTabSelectedListener(this); 

    bluetoothIn=new Handler() { 

     String readMessage; 
     String[] values = new String[]{""}; 

     public void handleMessage(android.os.Message msg) { 

      if (msg.what == handlerState) { 

       readMessage = (String) msg.obj; 
       values = readMessage.split("#"); 
       for (int j = 0; j < values.length; j++) { 

        int rem = j % 3; 

        if (rem == 0) { 

         tmpF.setText(values[j] + " C"); 
         tempGL = String.valueOf(values[j]); 

         try { 
          dblTemp = Double.parseDouble(tempGL); 
         } catch (NumberFormatException e) { 
          e.printStackTrace(); 
         } 

        } else if (rem == 1) { 

         CoF.setText(values[j] + " ppm"); 
         coGL = values[j]; 
         try { 
          dblCo = Double.parseDouble(coGL); 
         } catch (NumberFormatException e) { 
          e.printStackTrace(); 
         } 

        } else if (rem == 2) { 
         humF.setText(values[j] + " %"); 
         HumGL = values[j]; 
        } 
       } 
      } 
     } 
    }; 

    btAdapter=BluetoothAdapter.getDefaultAdapter(); // get Bluetooth 
} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    // mViewPager.setCurrentItem(tab.getPosition()); 

} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 
} 

ページャ

public class Pager extends FragmentStatePagerAdapter { 

//integer to count number of tabs 
int tabCount; 

//Constructor to the class 
public Pager(FragmentManager fm, int tabCount) { 
    super(fm); 
    //Initializing tab count 
    this.tabCount= tabCount; 
} 

//Overriding method getItem 
@Override 
public Fragment getItem(int position) { 
    //Returning the current tabs 
    switch (position) { 
     case 0: 
      Tab1 tab1 = new Tab1(); 
      return tab1; 
     case 1: 
      Tab2 tab2 = new Tab2(); 
      return tab2; 
     case 2: 
      Tab3 tab3 = new Tab3(); 
      return tab3; 
     default: 
      return null; 
    } 
} 

//Overriden method getCount to get the number of tabs 
@Override 
public int getCount() { 
    return tabCount; 
} 
} 

Tab1を

public class OneFragment extends Fragment { 

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

} 
} 

fragment_oneをパラメータとして値を渡す試み.xml

私は活動からのsetTextしようとすると、
<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="shinil.tablayout.OneFragment" 
android:id="@+id/rltnvnv"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Temperature" 
    android:textSize="40dp" 
    android:textStyle="bold" 
    android:id="@+id/textviewtemp" 
    android:layout_centerInParent="true"/> 

</RelativeLayout> 

frag_home.xml

LinearLayout 
android:id="@+id/main_layout" 
android:orientation="vertical" 
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" 
tools:context=".MainActivity"> 

<!-- our toolbar --> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:minHeight="?attr/actionBarSize" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

<!-- our tablayout to display tabs --> 
<android.support.design.widget.TabLayout 
    android:id="@+id/tabLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 

    android:minHeight="?attr/actionBarSize" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<!-- View pager to swipe views --> 
<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent"/> 

    </LinearLayout>  

NPEが発生します。

断片クラス::

以下
public class FragmentOne extends Fragment { 


private ViewCallback mCallback; 

public FragmentOne(ViewCallback mCallback) { 
    this.mCallback = mCallback; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_one, container, false); 
    mCallback.updateTextView((TextView) view.findViewById(R.id.fragmentTextView)); 
    return view; 
} 

public interface ViewCallback { 
    void updateTextView(TextView view); 
} 
} 

はActivityクラスである:あなたの活動にコールバック

public class MainCallbackActivity extends Activity implements CallbackFragment.ViewCallback { 

public TextView textView; 

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

    FragmentOne fragment = new FragmentOne(this); 
    getFragmentManager().beginTransaction().add(R.id.frameLayout, fragment).commit(); 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (textView != null) 
     textView.setText("Updating Fragment TextView in Activity..!!"); 
} 

@Override 
public void updateTextView(TextView view) { 
    this.textView = view; 
} 
} 

Implmentは更新class..thenコールバック以下

+1

「あなたの名前が見つかりませんでした例外」 –

+1

どこでtextViewを初期化しましたか?テキストを設定する前に初期化する必要があります。 findViewById(R.id.textviewtemp)を使用して初期化します。 –

+0

そのtextViewはフラグメントxmlにありますが、あなたはそれをアクティビティで使用しようとしています。それは常にNPEを与えます。 –

答えて

1

使用を助けてくださいテキストビュー。

+0

はまだエラーになります。それを使用する方法を私に見せてもらえますか? –

+0

私は自分の答えを更新しました。 PLZを参照してください。 –

+0

フラグメントをアクティビティに追加する場所はどこですか? –

関連する問題