根据某些条件更改列表视图中特定项目的背景颜色

时间:2015-03-12 05:47:27

标签: android parse-platform

我正在使用解析后端和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没有背景颜色。

我花了一整天时间来解决这个问题......帮助我...谢谢你...

1 个答案:

答案 0 :(得分:-1)

要解决您的问题,请按照以下步骤操作。

  1. 创建自己的自定义适配器,您可以从here获得帮助。
  2. 在自定义适配器中获取特定列表项的引用并相应地更改其背景。