gpt4 book ai didi

java - 通过界面更新/设置文本

转载 作者:行者123 更新时间:2023-12-02 13:00:20 25 4
gpt4 key购买 nike

我正在尝试在 MainActivity 的选项卡上的 TextView 中设置通知的数量/计数。我已经通过使用接口(interface)成功获取了 fragment 和 Activity 之间的数据。每次当我收到通知时,它都会将该号码传递给我的 MainActivity。我能够显示数字,但我不知道如何在我的 TextView 上实现和设置。

public void onDataPass(String data) { Log.d("LOG","hello " + data); }

我能够从上面的代码中获得值(value)。下面是我的日志:

06-02 07:02:16.213 12310-12310/ D/LOG: hello Number of notifications: 1

06-02 07:03:26.697 12310-12310/ D/LOG: hello Number of notifications: 2

06-02 07:04:35.718 12310-12310 D/LOG: hello Number of notifications: 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);
}

enter image description here

下面是我的完整 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);

}
}

最佳答案

创建界面

public interface OnDataReceiverListener {
void onDataReceived(String myData);
}

在类中声明接口(interface),您可以在其中获取需要在其他 Activity 中传递的数据并为其创 build 置器...假设类名称为 MyReceiver.java

private static OnDataReceiverListener onDataReceiveListener;
public static void setOnDataReceiveListener(OnDataReceiverListener _listener) {
onDataReceiveListener = _listener;
}

在 Activity 的 onCreate() 中调用此 setter,假设 MainActivity

MyReceiver.setOnDataReceiveListener(this);

// This will overided
@Override
public void onDataReceived(String myData) {
// Process your data
TextView b = (TextView) mTabLayout .getTabAt(2).getCustomView().findViewById(R.id.badge);
if (b != null) {
b.setText(myData);
}
}

不要忘记将 setter 设置为 null,因为界面是静态的。在 onDestroy()

中完成这项工作
public void onDestroy() {
MyReceiver.setOnDataReceiveListener(null);
super.onDestroy();
}

总结,声明 mTabLayout 为全局实例,在 onDataReceived 回调中设置徽章文本。

关于java - 通过界面更新/设置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44324281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com