Listview style Each Row

烈酒焚心 提交于 2019-12-24 08:22:25

问题


this is the code in my custom adapter (THE CODE IN BROWN COLOR) when initially list is build proper margin is applied to valid items when i scroll down and again scroll up all the rows in list shifts the margin left by 20 what i'm doing wrong please reply soon

@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;
    }

回答1:


because you are setting margins (the brown font) in 'if' statement:

if (movies != null)

just take it out of this if block (for example put it just before the return point)

Right now this code is probably not executed at the first view load, since the movie is null. When the getView is called second time, the movie is not null, and the marigin is set according to your 'brown' code.

if this is not the solution - maybe the inside if statement condition is not true (the one that is in first 'brown' row). so.. your own logic prevents the marigins to be set as you want :)

Please let me know if it helps.




回答2:


One way you could go about solving this problem is instead of using LayoutParams.setMargins(20, 0, 0, 0), you could create an empty TextView whose width is 20 dp by default and whose position will be to the left of your rows contents. It will be View.GONE by default, but when if (!((movies.getParent_comment_id()).toString().equals("null"))) happens, you can set that to View.VISIBLE



来源:https://stackoverflow.com/questions/17380439/listview-style-each-row

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!