我有一个使用适配器填充网格的活动。当按下网格中的项目时,我想在“ 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());
}

10-07 13:25
查看更多