Listview样式每一行

时间:2013-06-29 12:56:50

标签: android listview android-linearlayout custom-adapter

这是我自定义适配器中的代码(THE CODE IN BROWN COLOR)当最初列表构建时,当我向下滚动并再次向上滚动列表中的所有行时,适当的边距应用于有效项目,将剩余边距向左移动20我做错了请尽快回复

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

        final ViewHolder holder;
        // getting data
        final ViewMovieDetailsModel_ViewComments movies = getItem(position);

        if (convertView == null) 
        {
            convertView = View.inflate(context, R.layout.comment_row, null);                
            holder = new ViewHolder();

            //getting handles

            holder.comments_linearLayout = (LinearLayout) convertView.findViewById(R.id.comments_linearLayout);
            holder.commenter_textView = (TextView) convertView.findViewById(R.id.comment_row_commenter);
            holder.commented_on_textView = (TextView) convertView.findViewById(R.id.comment_row_comment_time);
            holder.comment_text_textView = (TextView) convertView.findViewById(R.id.comment_row_comment_text);
            holder.reply_button = (Button) convertView.findViewById(R.id.comment_row_reply_button);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder)convertView.getTag();
        }

        if (movies != null) 
        {
            if (((movies.getParent_comment_id()).toString().equals("null")) && session.isLoggedIn()==true) {
                holder.reply_button.setVisibility(View.VISIBLE);
            }else{
                holder.reply_button.setVisibility(View.INVISIBLE);
            }


`if (!((movies.getParent_comment_id()).toString().equals("null"))) 
{

LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
                    params.setMargins(20, 0, 0, 0);
                    holder.comments_linearLayout.setLayoutParams(params);
}`


            holder.commenter_textView.setText(movies.getUsername_commentor());

            holder.commenter_textView.setTag(movies.getUser_id_commentor());

        return convertView;
    }

2 个答案:

答案 0 :(得分:0)

因为您在'if'语句中设置了边距(棕色字体):

if (movies != null)

将它从if块中取出(例如将它放在返回点之前)

现在,此代码可能不会在第一个视图加载时执行,因为该影片为null。当第二次调用getView时,电影不为空,并且根据您的“棕色”代码设置marigin。

如果这不是解决方案 - 也许内部if语句条件不正确(第一个'褐色'行中的那个)。所以..你自己的逻辑阻止了你想要的marigins:)

如果有帮助,请告诉我。

答案 1 :(得分:0)

解决此问题的一种方法是使用LayoutParams.setMargins(20, 0, 0, 0),而不是使用TextView,您可以创建一个空20 dp,默认宽度为View.GONE,其位置将位于左侧您的行内容。默认情况下会为if (!((movies.getParent_comment_id()).toString().equals("null"))),但在View.VISIBLE发生时,您可以将其设置为{{1}}