【发布时间】:2017-11-03 14:10:41
【问题描述】:
我正在尝试在我的 MainActivity 选项卡上的文本视图中设置通知的数量/计数。我已经通过使用接口成功地获取了我的片段和活动之间的数据。每次我收到通知时,它都会将号码传递给我的 MainActivity。我可以显示数字,但我不知道如何在我的 textview 上实现和设置。
public void onDataPass(String data) { Log.d("LOG","你好" + 数据); }
我能够从上面的代码中获得价值。下面是我的日志:
06-02 07:02:16.213 12310-12310/ D/LOG: hello 通知数:1
06-02 07:03:26.697 12310-12310/ D/LOG: hello 通知数量:2
06-02 07:04:35.718 12310-12310 D/LOG: hello 通知数量:3
但是,我试图在我的 textview 上设置这个数字。即使在将我的“数据”声明为公开之后,我也会得到空值。我不确定如何将数据的值放入 textview 中。有人可以帮我解决这个问题吗?
if(tab != null && tab.getCustomView() != null) { TextView b = (TextView) tab.getCustomView().findViewById(R.id.badge); if (b != null) { b.setText(data); Log.d("hello1", "test1" + data); }
以下是我的完整 MainActivity 代码: MainActivity.java
public class MainActivity extends AppCompatActivity implements NotificationFragment.OnDataPass {
public String data;
private String name;
private String email;
private TextView badgeText;
public void onDataPass(String data) {
Log.d("LOG","hello " + data);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setContentView(R.layout.menu_actionbar_tab);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar ab = getSupportActionBar();
ab.setTitle("Test");
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
if (viewPager != null) {
setupViewPager(viewPager);
}
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
final int[] tabIcon = new int[]{
R.drawable.tab_item_remit_state,
R.drawable.tab_item_account_state,
R.drawable.tab_item_notification,
};
tabLayout.getTabAt(0).setIcon(tabIcon[0]);
tabLayout.getTabAt(1).setIcon(tabIcon[1]);
tabLayout.getTabAt(2).setIcon(tabIcon[2]);
TabLayout.Tab tab = tabLayout.getTabAt(2);
tab.setCustomView(R.layout.badged_tab);
if(tab != null && tab.getCustomView() != null) {
TextView b = (TextView) tab.getCustomView().findViewById(R.id.badge);
if (b != null) {
b.setText(data);
Log.d("hello1", "test1" + data);
}
final View v = tab.getCustomView().findViewById(R.id.badgeCotainer);
View a = tab.getCustomView();
a.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View a, MotionEvent event) {
v.setVisibility(View.INVISIBLE);
return false;
}
});
if (v != null ) {
v.setVisibility(View.VISIBLE);
}
}
【问题讨论】:
-
有几件事,在 onDataPass() 函数中看不到将数据分配给活动的类级别变量的部分,您只是在记录吗?另外我认为当 onCreate 方法被调用时,数据不会出现在活动的类级别数据变量中。您可能需要手动调用将在 onDataPass() 函数中设置选项卡文本值的函数。
-
@SAJ 是的,我只是在记录。如何在我的 onCreate 中调用 onDataPass 方法?或者如果我在 onDataPass 方法下设置文本是否有可能?我只登录 onDataPass 因为我的标签是 onCreate 。
-
是的,您需要在 onDataPass 方法中添加 setTabText 逻辑。你不应该调用 onCreate 方法。将选项卡文本逻辑提取到一个单独的函数中,该函数设置并从 onDataPass 调用该函数。
-
谢谢!我将尝试在我的 onDataPass 方法上实现 setText on tab 逻辑。