我有一个使用适配器填充网格的活动。当按下网格中的项目时,我想在“ NavbarFragment”中更改TextView的文本。
CategoryActivity.java:
GridView grid = (GridView) findViewById(R.id.gridlayout_grid);
grid.setAdapter(new GridAdapter(tiles));
CategoryActivity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_margin="5dp"
android:orientation="vertical"
tools:context=".Activity.CategoryActivity">
<fragment android:name="app_a_tize.expressme.Fragment.NavbarFragment"
android:id="@+id/fragNavbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<GridView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="5dp"
android:verticalSpacing="10dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:layout_gravity="center"
android:id="@+id/gridlayout_grid"/>
<fragment android:name="app_a_tize.expressme.Fragment.ConversationbarFragment"
android:id="@+id/fragConversation"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
GridAdapter.java中的onClickListener:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView textView = (TextView) v.findViewById(R.id.item_name);
String tileName = textView.getText().toString();
System.out.println("tileName" + tileName);
ConversationBarManager.getInstance().addWord(tileName);
NavbarFragment navbar = new NavbarFragment();
navbar.changeConversationBarString();
}
});
NavbarFragment.java中的函数:
public void changeConversationBarString(){
TextView conversationBar = (TextView) ?????.findViewById(R.id.conversationBar);
conversationBar.setText(ConversationBarManager.getInstance().getConversationBarString());
}
在此功能中,^我想更改片段中TextView对话栏的文本。但是我无法获得TextView,因为无论我尝试什么,都会得到一个NullPointer。因为findViewById不起作用。
关于findViewById的所有问题都表明您可以使用:onCreateView()方法中的getView()。
我的问题是:当单击网格中的项目时,如何更改NavbarFragment中TextView的text属性。
最佳答案
您可能想做的是更早地初始化TextView
。在#onCreateView()
像这样:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
mMyTextView = (TextView) view.findViewById(R.id.my_text_view);
}
然后在您的公开方法中:
public void changeConversationBarString(){
mMyTextView.setText(ConversationBarManager.getInstance().getConversationBarString());
}