Java 事件后加载ViewBinder
我正在尝试使用从Firebase(联系人同步的地方)读取数据获得的信息更新我的listview(联系人列表)。基本上,我正在尝试更改Firebase中备份的联系人的颜色Java 事件后加载ViewBinder,java,android,Java,Android,我正在尝试使用从Firebase(联系人同步的地方)读取数据获得的信息更新我的listview(联系人列表)。基本上,我正在尝试更改Firebase中备份的联系人的颜色 final SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Cursor cursor,
final SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
TextView tv = (TextView) view.findViewById(android.R.id.text1);
// IF USERID MATCHES
// DO STUFF, EG. tv.setBackgroundColor(......);
return false;
}
};
mAdapter.setViewBinder(binder);
final Cursor c = mAdapter.getCursor();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
final String userID = c.getString(c.getColumnIndex(Phone._ID));
userRoot.child(userID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
/* CALLS THE BINDER ON THIS USERID */
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
当我进入onDataChange功能时,我很难理解要传递什么以及如何更新ViewBinder。您正在向后使用
光标或适配器。您不需要获取光标并从中读取数据;ListView
就是这样做的。您的工作是提供一个游标。拥有光标后,您可以调用CursorAdapter.changeCursor()
,而列表视图将看到您更改了光标并进行了更新
因此,如果我正确理解您正在做的事情,那么您的设备上有一个带有联系人的光标
,我假设它来自联系人内容提供商
。现在,您要将该数据与Firebase数据合并,Firebase数据基本上是JSON
以下是配方:
首先创建一些类为Firebase数据提供数据模型,并使用一些方法从JSON加载数据
接下来,创建一个子类SimpleCursorAdapter.ViewBinder
,您将在适配器方法setViewBinder()
中设置该子类。您的子类将需要某种方法来接受来自Firebase的JSON数据。例如,假设您有一个类似于setFirebaseData()
的方法
在这个过程中的某个地方,您可以从系统中获得一个联系人数据的游标,并在适配器上调用changecoursor()
,将这些数据连接起来
现在,当触发onDataChange
时,您可以将DataSnapshot
中的JSON数据读取到您的模型中,并在您的模型中调用setFirebaseData()
方法
加载Firebase数据后,必须告诉适配器其数据已更改。我从来没有用光标或适配器这样做过,说它真的没有改变过。您可以调用notifyDataSetChanged()
,也可以只调用changeCursor()
并为其提供与现有光标相同的光标。但无论如何,您必须说服适配器,是时候更新了
一旦列表视图
看到适配器已更改并开始更新,您的
ViewBinder.setViewValue()
将被调用。光标已经为您定位,因此您只需为光标中的列调用getString()
,getInt()
,等等。在光标中的联系人数据或光标位置之间,存在与已设置的Firebase数据相关的内容。因此,如果您需要根据Firebase数据更改颜色,请在此处查找联系人。您实际上是将光标数据与Firebase数据连接起来
如果它仍然令人困惑,请对模型/视图/控制器设计模式进行一些研究,并了解ListView
和ListAdapter
如何在MVC中工作。ViewBinder
应该由mAdapter
调用,而不是由您调用