【问题标题】:Wrong color being assigned to layout为布局分配了错误的颜色
【发布时间】:2015-08-23 20:16:41
【问题描述】:

我的应用通过我的片段的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();
    }
});

我的适配器的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>

但是,它将颜色分配给下一个帖子,而不是当前帖子。我的代码有什么问题?

【问题讨论】:

    标签: android android-layout android-xml


    【解决方案1】:

    else 分支是错误的,你应该删除它。 converView 只是一次为空。在您分配颜色后的情况下,第一次(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,就是你想要的

    【讨论】:

    • 忘记从之前的一些测试中删除它,但现在颜色根本没有改变。它只是保持黑色(我默认设置的颜色)。 ://
    • 更正,它设置了每个帖子使用的第一种颜色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多