【问题标题】:set left margin for view ... NullPointerException is coming为视图设置左边距... NullPointerException 即将到来
【发布时间】:2015-01-06 10:03:57
【问题描述】:

我的代码这是一个适配器,我想在列表视图中将我的布局动态对齐到左侧和右侧...并且空指针异常出现在 relativeParams.leftMargin=80;

Java:

public View getView(int position, View view, ViewGroup parent)
    {
        ViewHolder viewHolder;
        ChatItem chatItem = getItem(position);
        viewAligned = view;
        if(view == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater)  
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.cell_messages_layout, null);
            viewHolder = new ViewHolder();
            viewHolder.message = (TextView) view.findViewById(R.id.fromZoneMessage1);
            viewHolder.rl = (RelativeLayout) view.findViewById(R.id.messageLayout);
            view.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) view.getTag();
        }

        viewHolder.message.setText(chatItem.getSenderMessage());
        if (chatItem.getAllignment() == 0)
        {
//          viewHolder.message.setGravity(Gravity.LEFT);
            viewHolder.message.setBackgroundResource(R.drawable.sent_message);
//          view.setBackgroundResource(R.drawable.sent_message);
        }
        else {
//          viewHolder.rl.setBackgroundResource(R.drawable.recieved_message);
//          view.holder.rl.set
//          viewHolder.message.setGravity(Gravity.RIGHT);
            viewHolder.message.setBackgroundResource(R.drawable.recieved_message);

            RelativeLayout.LayoutParams relativeParams = (RelativeLayout.LayoutParams) viewHolder.rl.getLayoutParams();
            relativeParams.leftMargin=80;
            viewHolder.rl.setLayoutParams(relativeParams);
//          LayoutParams lp = (LayoutParams) view.getLayoutParams();
        }
        return view;
    }

我的布局是....

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/messageLayout" 
   >


    <TextView 
        android:id="@+id/fromZoneMessage1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="10dp"
        android:padding="5dp"
        android:text="Hey Jack"
        />

</RelativeLayout>

请有人帮我把左边距放在我的视图中......

【问题讨论】:

  • view.setTag(viewHolder);放在return view;之前
  • 在提供的布局中,我无法找到 R.id.messageLayout 的 ID 为 RelativeLayout。你确定为 ListView 行视图使用正确的布局吗?
  • view.setTag(viewHolder) 不起作用...但是谢谢
  • 是的,我确定它对于listView的行的相对布局......还有其他方法吗
  • 您的RelativeLayout 在XML 中不包含id 属性。

标签: android android-layout


【解决方案1】:

我只是将视图类型转换为相对布局并设置其重力...对于设置参数,意味着边距我在主要相对布局内采用了另一个虚拟相对布局并进行了调整。

你可以看下面的代码和相对布局

public View getView(int position, View view, ViewGroup parent)
    {
        ViewHolder viewHolder;
        ChatItem chatItem = getItem(position);
        viewAligned = view;
        if(view == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.cell_messages_layout, null);
            viewHolder = new ViewHolder();
            viewHolder.message = (TextView) view.findViewById(R.id.fromZoneMessage1);
            viewHolder.rl = (RelativeLayout) view.findViewById(R.id.messageLayout);
            view.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) view.getTag();
        }

        viewHolder.message.setText(chatItem.getSenderMessage());
        if (chatItem.getAllignment() == 0)
        {

            viewHolder.message.setGravity(Gravity.LEFT);
            viewHolder.message.setBackgroundResource(R.drawable.recieved_message);
            ((RelativeLayout)view).setGravity(Gravity.RIGHT);
            android.widget.RelativeLayout.LayoutParams params = new LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT, android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
            params.leftMargin = 50;
            viewHolder.rl.setLayoutParams(params);

                    }
        else {
            viewHolder.message.setGravity(Gravity.LEFT);
            viewHolder.message.setBackgroundResource(R.drawable.sent_message);
            ((RelativeLayout)view).setGravity(Gravity.LEFT);
            android.widget.RelativeLayout.LayoutParams params = new LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT, android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
            params.rightMargin = 50;
            viewHolder.rl.setLayoutParams(params);
        }

        return view;
    }

布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
   >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/messageLayout" 
       >


    <TextView 
        android:id="@+id/fromZoneMessage1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="10dp"
        android:padding="5dp"
        android:text="Hey Jack"/>

</RelativeLayout>
</RelativeLayout>

【讨论】:

    【解决方案2】:

    尝试使用 AbsListView.LayoutParams 而不是使用 RelativeLayout.LayoutParams,因为您的视图位于 ListView 中。

    【讨论】:

    • 不工作@Yogesh Narayanan
    • 是的@Yogesh Narayanan
    • 我认为您可以创建新的 layoutparams 实例(不要使用 rl 的 getLayoutParams())并设置必要的对齐并将其分配给 rl。
    • 你解决了这个问题吗?
    • 是的,经过大量的努力,我修复了它......你可以看到我下面的答案......@Yogesh Narayanan
    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2013-09-02
    • 2011-10-28
    相关资源
    最近更新 更多