Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 根据变量更改单个列表视图中的文本颜色_Android_Json_Parsing - Fatal编程技术网

Android 根据变量更改单个列表视图中的文本颜色

Android 根据变量更改单个列表视图中的文本颜色,android,json,parsing,Android,Json,Parsing,我遵循了关于解析JSON的教程。一切都在运行,因为它本应根据我的需要对其进行编辑。我正在获取有关“服务器”的信息,其中一个字段是“状态”(向上或向下) 编辑:忘记发布教程链接 目前看起来是这样的: 上面是加载应用程序后发生的情况。单击是指当单击单个项目时,它将启动一个新的活动并单独显示该信息 您可以看到第二个服务器状态为“关闭”。基于此,我想改变文字颜色为红色的向下和保持绿色的向上 当它遍历并添加每个listview时,如何执行此操作 以下是(目前)与教程基本相同的代码: public void

我遵循了关于解析JSON的教程。一切都在运行,因为它本应根据我的需要对其进行编辑。我正在获取有关“服务器”的信息,其中一个字段是“状态”(向上或向下)

编辑:忘记发布教程链接

目前看起来是这样的: 上面是加载应用程序后发生的情况。单击是指当单击单个项目时,它将启动一个新的活动并单独显示该信息

您可以看到第二个服务器状态为“关闭”。基于此,我想改变文字颜色为红色的向下和保持绿色的向上

当它遍历并添加每个listview时,如何执行此操作

以下是(目前)与教程基本相同的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    serverList = new ArrayList<HashMap<String, String>>();

    ListView lv = getListView();

    // Listview on item click listener
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.name))
                    .getText().toString();
            String ip = ((TextView) view.findViewById(R.id.ipAddress))
                    .getText().toString();
            String status = ((TextView) view.findViewById(R.id.serverStatus))
                    .getText().toString();

            // Starting single server activity
            Intent in = new Intent(getApplicationContext(),
                    SingleContactActivity.class);
            in.putExtra(TAG_NAME, name);
            in.putExtra(TAG_IP, ip);
            in.putExtra(TAG_STATUS, status);
            startActivity(in);
        }
    });

    // Calling async task to get json
    new GetContacts().execute();
}

/**
 * Async task class to get json by making HTTP call
 * */
private class GetContacts extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONArray jArray = new JSONArray(jsonStr);

                // looping through All Servers
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject c = jArray.getJSONObject(i);

                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String ip = c.getString(TAG_IP);
                    String status = c.getString(TAG_STATUS);

                    // tmp hashmap for single server
                    HashMap<String, String> contact = new HashMap<String, String>();

                    contact.put(TAG_ID, id);
                    contact.put(TAG_NAME, name);
                    contact.put(TAG_IP, ip);
                    contact.put(TAG_STATUS, status);

                    // adding server to server list
                    serverList.add(contact);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */

        ListAdapter adapter = new SimpleAdapter(
                MainActivity.this, serverList,
                R.layout.list_item, new String[] { TAG_NAME, TAG_IP,
                        TAG_STATUS }, new int[] { R.id.name,
                        R.id.ipAddress, R.id.serverStatus });

        setListAdapter(adapter);
    }

}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serverList=newarraylist();
ListView lv=getListView();
//单击项目上的Listview侦听器
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//从选定的ListItem获取值
字符串名称=((TextView)view.findViewById(R.id.name))
.getText().toString();
字符串ip=((TextView)view.findViewById(R.id.ipAddress))
.getText().toString();
字符串状态=((TextView)view.findViewById(R.id.serverStatus))
.getText().toString();
//启动单服务器活动
Intent in=新的Intent(getApplicationContext(),
活动类);
in.putExtra(标签名称、名称);
in.putExtra(标签号IP,IP);
in.putExtra(标签状态、状态);
星触觉(in);
}
});
//调用异步任务以获取json
新建GetContacts().execute();
}
/**
*异步任务类通过HTTP调用获取json
* */
私有类GetContacts扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//显示进度对话框
pDialog=新建进度对话框(MainActivity.this);
setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//创建服务处理程序类实例
ServiceHandler sh=新的ServiceHandler();
//向url发出请求并获得响应
字符串jsonStr=sh.makeServiceCall(url,ServiceHandler.GET);
Log.d(“响应:”、“>”+jsonStr);
if(jsonStr!=null){
试一试{
JSONArray jArray=新JSONArray(jsonStr);
//在所有服务器中循环
for(int i=0;i
在列表适配器的定义中,在getView()方法中,找到textview并更改文本颜色

TextView tv = (TextView) listItem.findViewById(R.id.server_status);
tv.setTextColor(android.R.color.primary_text_dark);

您需要制作一个自定义适配器,并在
getView()
中检查服务器的状态是否已关闭,然后将相应文本视图的颜色设置为红色,否则将其设置为绿色

您的getView()应该如下所示:(这只是代码的蓝图)

编辑

  • 做一个示范班
  • 将阵列适配器设置为服务器类型

  • 在适配器的getView()中,对行项目充气,并设置详细信息。对于,已添加红色字体蓝图

  • 以自定义适配器(BaseAdapter)代替简单适配器


    然后在getView()方法中执行操作。

    您已经完成了大部分艰苦的工作:)

    首先创建一个对象来存储服务器详细信息,而不是一个HashMap(它既慢又重),另外一个对象适应性更强,更适合您的目的

    我已经创建了一个超级快速的示例(您的详细信息不完整,但应该很容易扩展)

    接下来,您需要创建一个自定义适配器。在您的示例中,您实际上使用了一个简单的适配器(ListAdapter adapter=new SimpleAdapter(),这是一个很好的第一步,但我们可以通过扩展它来对此进行一些改进。这将允许我们更改listview中每个元素的情况。例如,更改颜色等

    这里有一个快速的e
    getView(){
         String serverstatus = server.getStatus();
        // get status should be method in method in model class for server.
        if(serverstatus.equals("DOWN")){
           tv.setTextColor(Color.RED);
        }else{
           tv.setTextColor(Color.GREEN);
        }
    }
    
    class Server{
       String serverName, serverIp, serverStatus;
          // getter and setter.
      }
    
    package com.example.adaptertest;
    
    public class HolderServer {
    
    String serverName;
    boolean isServerUp;
    
    public HolderServer(String serverName, boolean isServerUp) {
        this.serverName = serverName;
        this.isServerUp = isServerUp;
    }
    
    public String getServerName() {
        return serverName;
    }
    
    public void setServerName(String serverName) {
        this.serverName = serverName;
    }
    
    public boolean isServerUp() {
        return isServerUp;
    }
    
    public void setServerUp(boolean isServerUp) {
        this.isServerUp = isServerUp;
    }
    }
    
    package com.example.adaptertest;
    
    import java.util.ArrayList;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    
    public class AdapterServers extends ArrayAdapter<HolderServer>{
    
    ArrayList<HolderServer> mServers = new ArrayList<HolderServer>();
    private LayoutInflater mInflater;
    Context mContext;
    
    public AdapterServers(Context context, int resource, ArrayList<HolderServer> servers) {
        super(context, resource, servers);
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mContext = context;
        mServers = servers;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Inflate view for each element in list.
        convertView = mInflater.inflate(R.layout.server_list_item, null);
    
        //Get details for current server
        HolderServer server = mServers.get(position);
    
        //Set server name
        ((TextView) convertView.findViewById(R.id.server_list_item_txt_servername)).setText(server.getServerName());
    
        //Now we set the status text and color 
        TextView status = (TextView) convertView.findViewById(R.id.server_list_item_txt_serverstatus);
        if(server.isServerUp){
            status.setText(mContext.getResources().getString(R.string.up));
            status.setTextColor(mContext.getResources().getColor(R.color.green));
        }else{
            status.setText(mContext.getResources().getString(R.string.down));
            status.setTextColor(mContext.getResources().getColor(R.color.red));
        }
    
        return convertView;
    }
    }
    
    ArrayList<HolderServer> mServerList = new ArrayList<HolderServer>();
    
                    // tmp hashmap for single server
                    HashMap<String, String> contact = new HashMap<String, String>();
    
                    contact.put(TAG_ID, id);
                    contact.put(TAG_NAME, name);
                    contact.put(TAG_IP, ip);
                    contact.put(TAG_STATUS, status);
    
        HolderServer server = new HolderServer("Server1", true);
        serverList.add(server);
    
        AdapterServers adapter = new AdapterServers(this, 0, serverList);
        ((ListView) findViewById(R.id.fragment_main_listview)).setAdapter(adapter);