我正在使用解析后端和Sinch服务开发一个即时聊天应用程序。在我的应用程序ListUsersActivity中,我从解析后端获取所有用户,我正在显示它这工作正常。并在解析回来结束我用一个布尔字段存储每条消息READ值为false表示消息处于未读状态,发件人ID和收件人ID。
现在我要做的是在显示用户时,如果有特定用户的任何未读消息,我想要突出显示该用户,以便通知一些未读消息。
为实现这一点,我试着追随到现在......
public class ListUsersActivity extends ActionBarActivity {
private String currentUserId;
private ArrayAdapter<String> namesArrayAdapter;
private ArrayList<String> names;
private ListView usersListView;
private Button logoutButton;
private ProgressDialog progressDialog;
private BroadcastReceiver receiver = null;
private Boolean Net;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_users);
//showSpinner();
}
//display clickable a list of all users
private void setConversationsList() {
currentUserId = ParseUser.getCurrentUser().getObjectId();
names = new ArrayList<String>();
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereNotEqualTo("objectId", currentUserId);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> userList, com.parse.ParseException e) {
if (e == null) {
for (int i=0; i<userList.size(); i++) {
names.add(userList.get(i).getUsername().toString());
String userId = userList.get(i).getObjectId().toString();
ParseQuery<ParseObject> query = ParseQuery.getQuery("ParseMessage");
query.whereEqualTo("read", false);
query.whereEqualTo("senderId", userId);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> messageList, ParseException e) {
if(e == null){
namesArrayAdapter = new ArrayAdapter<String> (getApplicationContext(),R.layout.newmessage,names);
}
}
});
}
usersListView = (ListView)findViewById(R.id.usersListView);
namesArrayAdapter =
new ArrayAdapter<String>(getApplicationContext(),
R.layout.user_list_item, names);
usersListView.setAdapter(namesArrayAdapter);
usersListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int i, long l) {
try {
System.out.println(i);
openConversation(names, i);
}
catch (IndexOutOfBoundsException e1){
System.out.println(e1.getMessage());
}
}
});
} else {
Toast.makeText(getApplicationContext(),
"Error loading user list",
Toast.LENGTH_LONG).show();
}
}
});
}
//open a conversation with one person
public void openConversation(ArrayList<String> names, int pos) {
Net=isNetworkAvailable();
if(Net) {
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("username", names.get(pos));
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> user, com.parse.ParseException e) {
if (e == null) {
Intent intent = new Intent(getApplicationContext(), MessagingActivity.class);
intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId());
intent.putExtra("name", user.get(0).getUsername());
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(),
"Error finding that user",
Toast.LENGTH_SHORT).show();
}
}
});
}
else{
Toast.makeText(this,"No internet or slow",Toast.LENGTH_SHORT).show();
}
}
//show a loading spinner while the sinch client starts
private void showSpinner() {
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Loading");
progressDialog.setMessage("Please wait...");
progressDialog.show();
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Boolean success = intent.getBooleanExtra("success", false);
progressDialog.dismiss();
if (!success) {
Toast.makeText(getApplicationContext(), "Messaging service failed to start", Toast.LENGTH_LONG).show();
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("com.moborder.anil.commoner.ListUsersActivity"));
}
@Override
public void onResume() {
setConversationsList();
super.onResume();
}
public void onBackPressed() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
public boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}
我为litview项目创建了两个xml文件 1.具有粉红色背景颜色的newmessage.xml。 2 .users_list_item.xml没有背景颜色。
我花了一整天时间来解决这个问题......帮助我...谢谢你...