热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java阅读firebaseDB后如何在ListView上更改颜色和字体

如何处理为ListView显示空视图的问题,因为当我从Firebase数据库读取数据并将其显示在ListView中时,我不知道要放入哪些数据.我正在使用CustomListAdapter更改字体

如何处理为ListView显示空视图的问题,因为当我从Firebase数据库读取数据并将其显示在ListView中时,我不知道要放入哪些数据.我正在使用CustomListAdapter更改字体颜色和ListView的背景颜色

注意:我正在从Firebase数据库读取数据,并将其显示在ListView中,任何解决方案

CustomListAdapter.java

public class CustomListAdapter extends BaseAdapter {
private static final int HERO_COUNT = 12;
private Context context;
private List items;
public CustomListAdapter(Context context) {
this.cOntext= context;
items = new ArrayList<>();
}
@Override
public int getCount() {
return HERO_COUNT;
}
@Override
public String getItem(int position) {
if (position >= 0 && position return items.get(position);
}
return "";
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
View mView = v;
if (mView == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = vi.inflate(R.layout.custom_list, null, false);
TextView text = (TextView) mView.findViewById(R.id.textView);
//textView.setTextColor(Color.BLUE);
text.setText(getItem(position));
if (items.isEmpty()) {
// Set holder color
} else {
text.setTextColor(Color.WHITE);
int color = Color.argb(200, 255, 64, 64);
text.setBackgroundColor(color);
}
}
return mView;
}
public void updateList(List updatedItems) {
items.clear();
items.addAll(updatedItems);
notifyDataSetChanged();
}
}

ViewDatabase.java

public class ViewDatabase extends AppCompatActivity {
private static final String TAG = "ViewDatabase";
//add Firebase Database stuff
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private String userID;
private ListView mListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_database_layout);
mListView = (ListView) findViewById(R.id.listview);
CustomListAdapter adapter = new CustomListAdapter(this);
mListView.setAdapter(adapter);
//declare the database reference object. This is what we use to access the database.
//NOTE: Unless you are signed in, this will not be useable.
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference();
FirebaseUser user = mAuth.getCurrentUser();
// userID = user.getUid();
userID = "";
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {// User is signed inLog.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());toastMessage("Successfully signed in.");
} else {// User is signed outLog.d(TAG, "onAuthStateChanged:signed_out");toastMessage("Successfully signed out.");
}
// ...
}
};
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
showData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void showData(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
DailyInfo uInfo = new DailyInfo();
uInfo.setHero1(ds.child(userID).getValue(DailyInfo.class).getHero1()); //set the name1
uInfo.setHero2(ds.child(userID).getValue(DailyInfo.class).getHero2()); //set the name2
uInfo.setHero3(ds.child(userID).getValue(DailyInfo.class).getHero3()); //set the name3
uInfo.setHero4(ds.child(userID).getValue(DailyInfo.class).getHero4()); //set the name4
uInfo.setHero5(ds.child(userID).getValue(DailyInfo.class).getHero5()); //set the name5
uInfo.setHero6(ds.child(userID).getValue(DailyInfo.class).getHero6()); //set the name6
uInfo.setHero7(ds.child(userID).getValue(DailyInfo.class).getHero7()); //set the name7
uInfo.setHero8(ds.child(userID).getValue(DailyInfo.class).getHero8()); //set the name8
uInfo.setHero9(ds.child(userID).getValue(DailyInfo.class).getHero9()); //set the name9
uInfo.setHero10(ds.child(userID).getValue(DailyInfo.class).getHero10()); //set the name10
uInfo.setHero11(ds.child(userID).getValue(DailyInfo.class).getHero11()); //set the name11
uInfo.setHero12(ds.child(userID).getValue(DailyInfo.class).getHero12()); //set the name12
//display all the information
Log.d(TAG, "showData: Hero1: " + uInfo.getHero1());
Log.d(TAG, "showData: Hero2: " + uInfo.getHero2());
Log.d(TAG, "showData: Hero3: " + uInfo.getHero3());
Log.d(TAG, "showData: Hero4: " + uInfo.getHero4());
Log.d(TAG, "showData: Hero5: " + uInfo.getHero5());
Log.d(TAG, "showData: Hero6: " + uInfo.getHero6());
Log.d(TAG, "showData: Hero7: " + uInfo.getHero7());
Log.d(TAG, "showData: Hero8: " + uInfo.getHero8());
Log.d(TAG, "showData: Hero9: " + uInfo.getHero9());
Log.d(TAG, "showData: Hero10: " + uInfo.getHero10());
Log.d(TAG, "showData: Hero11: " + uInfo.getHero11());
Log.d(TAG, "showData: Hero12: " + uInfo.getHero12());
ArrayList array = new ArrayList<>();
array.add(uInfo.getHero1());
array.add(uInfo.getHero2());
array.add(uInfo.getHero3());
array.add(uInfo.getHero4());
array.add(uInfo.getHero5());
array.add(uInfo.getHero6());
array.add(uInfo.getHero7());
array.add(uInfo.getHero8());
array.add(uInfo.getHero9());
array.add(uInfo.getHero10());
array.add(uInfo.getHero11());
array.add(uInfo.getHero12());
/* ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
mListView.setAdapter(adapter);*/
if (mListView.getAdapter() instanceof CustomListAdapter) {
((CustomListAdapter) mListView.getAdapter()).updateList(array);
mListView.setBackgroundColor(ContextCompat.getColor(mListView.getContext(), R.color.category_colors));
}
}
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
/**
* customizable toast
*
* @param message
*/
private void toastMessage(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}

view_database_layout.xml


android:layout_
android:layout_
android:orientation="vertical">
android:layout_
android:layout_
android:orientation="vertical">
android:id="@+id/tvUserInfo"
android:layout_
android:layout_
android:text="User Information"
android:textAlignment="center"
android:textColor="@color/colorPrimaryDark"
android:textSize="25sp"/>
android:id="@+id/listview"
android:layout_
android:layout_/>


custom_list.xml


xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
android:layout_
android:layout_
android:id="@+id/textView"
android:textSize="20px" android:paddingTop="10dip" android:paddingBottom="10dip"/>

DailyInfo.java

public class DailyInfo {
private String hero1;
private String hero2;
private String hero3;
private String hero4;
private String hero5;
private String hero6;
private String hero7;
private String hero8;
private String hero9;
private String hero10;
private String hero11;
private String hero12;
public DailyInfo(){
}
public String getHero1() {
return hero1;
}
public void setHero1(String hero1) {
this.hero1 = hero1;
}
public String getHero2() {
return hero2;
}
public void setHero2(String hero2) {
this.hero2 = hero2;
}
public String getHero3() {
return hero3;
}
public void setHero3(String hero3) {
this.hero3 = hero3;
}
public String getHero4() {
return hero4;
}
public void setHero4(String hero4) {
this.hero4 = hero4;
}
public String getHero5() {
return hero5;
}
public void setHero5(String hero5) {
this.hero5 = hero5;
}
public String getHero6() {
return hero6;
}
public void setHero6(String hero6) {
this.hero6 = hero6;
}
public String getHero7() {
return hero7;
}
public void setHero7(String hero7) {
this.hero7 = hero7;
}
public String getHero8() {
return hero8;
}
public void setHero8(String hero8) {
this.hero8 = hero8;
}
public String getHero9() {
return hero9;
}
public void setHero9(String hero9) {
this.hero9 = hero9;
}
public String getHero10() {
return hero10;
}
public void setHero10(String hero10) {
this.hero10 = hero10;
}
public String getHero11() {
return hero11;
}
public void setHero11(String hero11) {
this.hero11 = hero11;
}
public String getHero12() {
return hero12;
}
public void setHero12(String hero12) {
this.hero12 = hero12;
}
}

解决方法:

您在ValueEventListener上收到响应后创建适配器:

CustomListAdapter adapter = new CustomListAdapter(ViewDatabase.this , R.layout.custom_list , mList);
ListView mListView= findViewById(R.id.listview);
mListView.setAdapter(adapter);

取而代之的是,例如,在onCreate内的ViewDatabase上设置适配器,并根据该初始状态设置颜色.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_database_layout);
mListView = findViewById(R.id.listview);
CustomListAdapter adapter = new CustomListAdapter(this);
mListView.setAdapter(adapter);
//[...]
}

并且,而不是创建适配器,而是对其进行更新:

private void showData(DataSnapshot dataSnapshot) {
//[...]
if (mListView.getAdapter() instanceof CustomListAdapter) {
((CustomListAdapter)mListView.getAdapter()).updateList(array);
}
}

您还可以将ArrayAdapter替换为BaseAdapter作为扩展类:

public class CustomListAdapter extends BaseAdapter {
private static final int HERO_COUNT = 12;
private Context context;
private List items;
public CustomListAdapter(Context context) {
this.cOntext= context;
items = new ArrayList<>();
}
@Override
public int getCount() {
return HERO_COUNT;
}
@Override
public String getItem(int position) {
if (position >= 0 && position }
return "";
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
View mView = v;
if (mView == null) {LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mView = vi.inflate(R.layout.custom_list, null, false);
}
//Bind view content here
//TODO associate holder to tag
return mView;
}
public void updateList(List updatedItems) {
items.clear();
items.addAll(updatedItems);
notifyDataSetChanged();
}
}
}

编辑:

为了在接收值时更改列表上的默认背景色,可以在主布局上设置默认颜色:


android:layout_
android:layout_
android:orientation="vertical">
android:layout_
android:layout_
android:orientation="vertical">
android:id="@+id/tvUserInfo"
android:layout_
android:layout_
android:text="User Information"
android:textAlignment="center"
android:textColor="@color/colorPrimaryDark"
android:textSize="25sp"/>
android:id="@+id/listview"
android:background="@color/empty_color"
android:layout_
android:layout_/>


然后在收到值时更改它:

private void showData(DataSnapshot dataSnapshot) {
//[...]
if (mListView.getAdapter() instanceof CustomListAdapter) {
((CustomListAdapter)mListView.getAdapter()).updateList(array);
listView.setBackgroundColor(ContextCompat.getColor(listView.getContext(), R.color.loaded_color));
}
}

如果要更改行颜色,则需要在字符串为空时更改getView上的行布局.

编辑2
指定在何处进行视图更改


推荐阅读
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • andr ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 本文介绍如何在 FireDAC 环境下实现 FDMEMTable 字段的自动获取,为开发人员提供便捷的数据处理方式。 ... [详细]
author-avatar
青藤摄影876
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有