java - 如何在片段的活动中设置公共文本视图?
问题描述
我想在片段的活动中设置 textview 的文本。我就是这样做的。
MainActivity.java
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
public TextView textViewNotification;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
textViewNotification = (TextView) MenuItemCompat.getActionView(navigationView.getMenu().findItem(R.id.nav_notification));
}
}
HomeFragment.java
public class HomeFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
((MainActivity)getActivity()).getSupportActionBar().setTitle("PIT IAI & FIP Regional");
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_home, container, false);
MainActivity activity = (MainActivity) getActivity();
activity.notification.setText("This is a test"); // => got error here.
return root;
}
}
但它没有用。这是我得到的错误:
android.content.res.Resources$NotFoundException: String resource ID #0x1
at android.content.res.Resources.getText(Resources.java:348)
at android.widget.TextView.setText(TextView.java:5846)
究竟是如何从片段中获取和设置活动的公共属性?不可能吗?请帮忙。
解决方案
假设您想根据某些操作将文本发送到活动。
您可以使用接口,首先在您的片段中创建一个公共接口,然后在其中添加一个方法,该方法采用一个字符串参数
public interface CommunicateWithActivity{
void onCommunicate(String s)
}
, 声明一个 CommunicateWithActivity 类型的全局变量 mListener,
private CommunicateWithActivity mListener;
然后覆盖 onAttach 和内部 try/catch 块
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
mListener = (CommunicateWithActivity) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + "CommunicateWithActivity implementation in Activity is required");
}
}
然后在活动中实现接口在活动中覆盖“onComunicate(String s)”方法,您将在方法中获取您的字符串。
@Override
public void onCommunicate(String s) {
//do whatever you want
}
推荐阅读
- laravel - 使用我的新配置文件通过新的数据库连接迁移 Laravel 有什么方法吗?
- ios - 此服务器的证书无效 iOS
- postgresql - 如何使用 spring-data-jdbc 读/写 postgres jsonb 类型?
- python - Object_Detection 在张量流中不起作用
- c# - 删除datagridview单元格点击事件
- firebase - 未处理的异常:错误:找不到正确的提供程序
在此 MyApp 小部件上方 - reactjs - 如何将状态中的数据从一个组件传递到不同文件夹中的另一个组件?
- tensorflow - 张量流中的自注意力和多输入模型
- apache-spark - 给定输入列无法解析“Column_Name”:错误:Pyspark Dataframes
- android - 从客户端android上传文件到服务器django