Android 为布局指定了错误的颜色

Android 为布局指定了错误的颜色,android,android-layout,android-xml,Android,Android Layout,Android Xml,我的应用程序从我的片段的onCreateView()方法中从我的站点API请求一些JSON数据: apiService.getJson(5, new Callback<PostData>() { @Override public void success(PostData postData, Response response) { final PostAdapter adapter = new PostAdapter(getActivity(),

我的应用程序从我的片段的
onCreateView()方法中从我的站点API请求一些JSON数据:

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();
    }
});
布局:

<?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>


但是,它会将颜色指定给下一篇文章,而不是当前文章。我的代码怎么了?

else分支出错,您应该删除它。converView仅为null一次。在您的情况下,在分配颜色后,第一次在else分支中
(convertView==null)
,您将反复返回相同的视图

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
,您需要的是else分支是错误的,您应该删除它。converView仅为null一次。在您的情况下,在分配颜色后,第一次在else分支中
(convertView==null)
,您将反复返回相同的视图

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
,这就是您想要的

忘记了从以前的一些测试中删除它,但是现在颜色一点也没有改变。它只是保持黑色(默认设置的颜色):/更正,它正在设置每篇文章使用的第一种颜色。忘记从以前的一些测试中删除它,但现在颜色根本没有改变。它只是保持黑色(默认设置的颜色):/更正,这是设置每篇文章使用的第一种颜色。