2015-08-23 2 views
1

Моих запросов приложения некоторых JSON данные API моего сайта внутри onCreateView() метода моего фрагмента:Неправильного цвета быть назначен макетом

apiService.getJson(5, new Callback<PostData>() { 

    @Override 
    public void success(PostData postData, Response response) { 
     final PostAdapter adapter = new PostAdapter(getActivity(), postArray); 
     postArray.addAll(postData.getData()); 
     listView.setAdapter(adapter); 

     adapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void failure(RetrofitError retrofitError) { 
     retrofitError.printStackTrace(); 
    } 
}); 

getView() метод моего адаптера выглядит следующим образом:

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

    Post post = getItem(position); 

    if (view == null) { 
     view = LayoutInflater.from(context).inflate(R.layout.post_layout, parent, false); 
    } else { 
     return view; 
    } 

    LayerDrawable shapeLayout = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.post_bg); 
    GradientDrawable shape = (GradientDrawable) shapeLayout.findDrawableByLayerId(R.id.post_bg_border); 
    shape.setColor(Color.parseColor("#" + post.getColor())); 

    return view; 
} 

Компоновка :

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/post_bg_border"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000000" /> 
     </shape> 
    </item> 
    <item android:left="5dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/bg" /> 
     </shape> 
    </item> 
</layer-list> 

Однако он присваивает цвет nex t, а не текущей. Что случилось с моим кодом?

ответ

0

Неверная ветка неверна, и вы должны ее удалить. convertView имеет значение null только один раз. В вашем случае после того, как вы назначили цвет, первый раз (convertView == null), в ветке else, вы возвращаете один и тот же вид снова и снова.

if (view == null) { 
     view = LayoutInflater.from(context).inflate(R.layout.post_layout, parent, false); 
} 

LayerDrawable shapeLayout = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.link_info_bg); 
GradientDrawable shape = (GradientDrawable) shapeLayout.findDrawableByLayerId(R.id.link_info_bg_border); 
shape.setColor(Color.parseColor("#" + post.getColor())); 

без else, является то, что вы хотите

+0

Забыл удалить, что из некоторых предыдущих испытаний, но теперь цвет не меняется вообще. Он просто остается черным (цвет, который я установил по умолчанию). :/ – user

+0

Исправление, оно устанавливает первый цвет, используемый на каждом посту. – user

Смежные вопросы