2016-05-25 15 views
1

Ich habe folgende JSON-Antwort zu setzen, ich versuche, Farbe wie pro DisplyText zu setzen, aber es nur letzten Farbcode ganzes String,Wie Farbcode per JSON-Objekt

JSON Response

JAVA-Code eingestellt

ch_list = new ArrayList<String>(); 
         color_list=new ArrayList<String>(); 

         try { 

          for (int i = 0; i < response.length(); i++) { 

           JSONObject person = (JSONObject) response 
             .get(i); 

           System.out.println("person"+person); 

           String searchcode = person.getString("searchCode"); 
           System.out.println("searchcode"+searchcode); 





           JSONArray ja = person.getJSONArray("itemList"); 
           for (int j = 0; j < ja.length(); j++) { 

            JSONObject jo = ja.getJSONObject(j); 

            SearchResultModel ch = new SearchResultModel(); 
            ch.setSearch_Name(jo.getString("productName")); 
            ch.setSearch_Img(jo.getString("productImage")); 
            ch.setSearch_ImgLoc(jo.getString("productImageLoc")); 
            ch.setSearch_Price(jo.getString("productSP")); 
            ch.setSearch_RatingImg(jo.getString("pRatingImgName")); 
            ch.setSearch_RatingImgPath(jo.getString("pRatingImgPath")); 

            JSONArray txtdetail=jo.getJSONArray("productOfferText"); 

            System.out.println("txtdetailarray"+txtdetail); 

            StringBuilder sb = new StringBuilder(); 
            for(int k=0;k<txtdetail.length();k++) 
            { 
             JSONObject jdetail=txtdetail.getJSONObject(k); 



             disptext=jdetail.getString("displayText"); 
             dispclr=jdetail.getString("displayColor"); 
             ch_list.add(disptext); 
             color_list.add(dispclr); 
             sb.append(disptext); 

             System.out.println("clr" + color_list.get(k).toString()); 
             colors=color_list.get(k); 


             String string = colors; 
             String[] parts = string.split("\\*"); 
             int part1 = Integer.parseInt(parts[0]); 
             int part2 = Integer.parseInt(parts[1]); 
             int part3 = Integer.parseInt(parts[2]); 


             hex = String.format("#%02X%02X%02X", part1, part2, part3); 
             System.out.println("hexa"+hex); 

             // System.out.println("textnames" + ch_list.get(k).toString()); 


            } 




            detailtext=sb.toString().replaceAll("\\\\n", "\n"); 

            // System.out.println("gh"+sb.toString()+detailtext); 
            System.out.println("Output: " + sb.toString().replaceAll("\\\\n", "\n")); 

            searchlist.add(ch); 

           } 


          } 

Adapter

public class CustomListAdapterCountry extends BaseAdapter { 
     private AQuery aQuery; 
     private Activity activity; 
     private LayoutInflater inflater; 
     private List<SearchResultModel> movieItems; 
     private List<String> DispItems; 

     ImageLoader imageLoader = MyApplication.getInstance().getImageLoader(); 


     public CustomListAdapterCountry(Activity activity, List<SearchResultModel> movieItems,ArrayList<String> DispItems) { 
      this.activity = activity; 
      this.movieItems = movieItems; 
      this.DispItems = DispItems; 
      aQuery = new AQuery(this.activity); 
     } 

     @Override 
     public int getCount() { 
      return movieItems.size(); 
     } 

     @Override 
     public Object getItem(int location) { 
      return movieItems.get(location); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      if (inflater == null) 
       inflater = (LayoutInflater) activity 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (convertView == null) 
       convertView = inflater.inflate(R.layout.list_item_searchresult, null); 

      if (imageLoader == null) 
       imageLoader = MyApplication.getInstance().getImageLoader(); 

      NetworkImageView iv = (NetworkImageView) convertView 
        .findViewById(R.id.search_image); 

      ImageView ratingiv = (ImageView) convertView 
        .findViewById(R.id.search_rating); 


      TextView title = (TextView) convertView.findViewById(R.id.search_title); 
      TextView price = (TextView) convertView.findViewById(R.id.search_price); 
      TextView dettext = (TextView) convertView.findViewById(R.id.search_detailtext); 
      // getting movie data for the row 
      SearchResultModel m = movieItems.get(position); 




      iv.setImageUrl(m.getSearch_ImgLoc() + m.getSearch_Img(), imageLoader); 

      aQuery.id(ratingiv).image(m.getSearch_RatingImgPath() + m.getSearch_RatingImg(), true, true, 0, R.mipmap.ic_launcher); 


      //Log.d("searchimgs", joined); 

      // title 
      title.setText(m.getSearch_Name()); 
      price.setText("$"+m.getSearch_Price()); 
      dettext.setText(detailtext); 



      dettext.setTextColor(Color.parseColor(hex)); 

      return convertView; 
     } 

    } 
+0

Was ist der Wert von 'hex' in' detettext.setTextColor (Color.parseColor (hex)); '? Wie ich sehe, wird es der Wert der letzten Farbe sein? Worum geht es bei der Erstellung von 'ArrayList's' ch_list' und 'color_list', wenn Sie diese nicht verwenden? –

+0

könnte helfen http://Stackoverflow.com/a/22779643/2032561 – Bharatesh

Antwort

1

Sie können die folgende Methode versuchen. Formatieren Sie Ihren Text als HTML und verwenden Sie ihn für die Anzeige.

private String addColor(String str, String hexColor) 
{ 
    String html = ""; 
    if(str.contains("\\\\n")) 
    { 
     html = "</br>"; 
     str.replaceAll("\\\\n", ""); 
    } 
    html = html + "<font color='"+hexColor+"'>"+str+"</font>"; 
    return html; 
} 

löschen sb.append(disptext); von wo es jetzt ist, und fügen Sie sb.append(addColor(disptext, hex)); nach hex = String.format("#%02X%02X%02X", part1, part2, part3);

dettext.setText(detailtext); mit dettext.setText(Html.fromHtml(detailtext)); ersetzen und dettext.setTextColor(Color.parseColor(hex)); löschen.

Dies sollte die Aufgabe erledigen.

Sie verwenden auch nicht Ihre ArrayList s ch_list und color_list, die auch für diese Aufgabe verwendet werden können.

+0

Awesome, Danke, es hat funktioniert –

+0

können Sie eine Sache sagen? –

+0

Ja, was willst du wissen? –

0

Um Farbe prticular zu ändern wo rds in Textview und nicht die ganze Farbe ändern Sie

String noColor = "I like the "; 
String redColor = "<font color='#EE0000'>color red</font>"; 
yourTextView.setText(Html.fromHtml(noColor + redColor)); 

Nur diese nutzen und auf Ihre Bedürfnisse verwenden ändern. Teilen Sie Ihre Zeichenkette in kleinere Zeichenketten und appy Farbe zu jeder als Bedarf dann zusammenführen sie mit Html.fromHtml