2013-07-17 66 views
0

我已经定义了一个包含文本视图和图像视图的简单自定义布局。在我的主布局中,我想多次使用此布局,并且希望在我的代码中为这些文本和图像视图添加值。 (现在手动,但后来通过从数据库中获取数据)Android布局 - 以编程方式设置自定义布局组件的值

如何在我的代码中访问这些组件?

这是我的主要布局的xml文件

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/comment_content" 
    android:orientation="horizontal" > 

    <!-- these four components have the same structure but different styles and behaviors. --> 
    <include 
     android:id="@+id/like" 
     style="@style/LikeStyle" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     layout="@layout/comment_actions" /> 

    <include 
     android:id="@+id/dislike" 
     style="@style/DislikeStyle" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     layout="@layout/comment_actions" /> 

    <include 
     android:id="@+id/reply" 
     style="@style/ReplyStyle" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     layout="@layout/comment_actions" /> 

    <include 
     android:id="@+id/share" 
     style="@style/ShareStyle" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     layout="@layout/comment_actions" /> 
</LinearLayout> 

,并在我的适配器的一部分,我想设置数据:

public View getView(int position, View view, ViewGroup parent) { 
    ViewHolder holder = null; 
    if (view == null) { 
     LayoutInflater infalInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = infalInflater.inflate(R.layout.comment_item, null); 
     holder = new ViewHolder(); 
     holder.userName = (TextView) view.findViewById(R.id.user_name); 
     holder.userImage = (ImageView) view.findViewById(R.id.user_image); 
     holder.commentContent = (TextView) view.findViewById(R.id.comment_content); 
     holder.commentTitle = (TextView) view.findViewById(R.id.comment_title); 

     // these tree below layouts are custom. now when running my app i recieve a class cast exception 
     // because r.id.like and other twos are relative layout. 
     holder.likes = (TextView) view.findViewById(R.id.like); 
     holder.dislikes = (TextView) view.findViewById(R.id.dislike); 
     holder.replys = (TextView) view.findViewById(R.id.reply); 
     view.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) view.getTag(); 
    } 
    holder.userName.setText(((Comment) listData.get(position)).getUsername()); 
    holder.commentContent.setText(((Comment)listData.get(position)).getContent()); 
    holder.commentTitle.setText(((Comment)listData.get(position)).getTitle()); 

    // the part where I want to set data for these custom layouts. 
    holder.likes.setText(((Comment) listData.get(position)).getLikes()); 
    holder.dislikes.setText(((Comment) listData.get(position)).getDislikes()); 
    holder.replys.setText(((Comment) listData.get(position)).getReplys()); 
    return view; 
} 
+1

更好的方法是编写自定义视图类,有自己的布局和属性。 –

+0

谢谢。我会尝试。 –

回答

0

你必须将它转换为RelativeLayout。请转至comment_actions布局,并检查TextView是否设置了ID。如果没有,那就这样做。

然后从那里投你所好,回复和东西为RelativeLayout,找到TextView

RelativeLayout rlLikes = (RelativeLayout) view.findViewById(R.id.like); 
holder.likes = (TextView) rlLikes.findViewById(R.id.idOfTextViewInsideComment_actions); 
+0

是的。 TextView和ImageView都有ID。非常感谢你帮助我。 –

+0

这工作,现在我有正确的值设置。但是,当我跑我看到一个数字代码(喜欢数),而不是4个数字和4幅4图像(似乎他们都在彼此的顶部) 你有什么想法。那是为什么? –

+0

不,不是真的。我想这与'comment_actions'里面的布局有关。 –