1

我实际上尝试了一些非常简单的事情,但是 android 和 java 让我的生活变得不容易。这个想法是滚动到表格布局中的指定子项。

我正在使用 Layoutinflater 将条目添加到表格布局中,如下所示:

     TableLayout tl = (TableLayout)findViewById(R.id.myTableLayout3);  

     LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View itemView = inflater.inflate(R.layout.element_news, null);  

     TextView firstname = (TextView) itemView.findViewById(R.id.tvname);   
     firstname.setText(FN + " " + iLN);

     TextView date = (TextView) itemView.findViewById(R.id.tvdate);   
     date.setText(newPD);

     TextView post = (TextView) itemView.findViewById(R.id.tvpost);   
     post.setText(c.getString(iP));
     post.setFocusable(true);

     tl.addView(itemView, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

我尝试将 getChildAt() 用于表格布局,并且确实得到了孩子,但是当我使用孩子时,它会返回所有“0”。

示例代码:

LinearLayout row = (LinearLayout) tl.getChildAt(1);
TextView tv = (TextView) row.getChildAt(1);
tv.requestFocus();
Log.w("news", Integer.toString(tv.getHeight()));

对于 TextView 高度,它返回“0”,即使它包含多行并且 requestfocus() 也不起作用。

那么如何在表格布局中滚动到子项?

提前感谢您的帮助。

4

1 回答 1

1

该代码示例不起作用,因为您可能在onCreate方法中使用了它,并且当时尚未绘制 UI,因此视图没有任何尺寸。如果是这种情况,您可以简单地Runnable在您的一个视图上发布一个,以将维度收集延迟一点,直到在这样的onCreate方法之后:

// post the Runnable
tl.post(new Runnable() {

        @Override
        public void run() {
            LinearLayout row = (LinearLayout) tl.getChildAt(1);
                            // get the top position relative to the parent  
            int top = tr.getTop();
                            // scroll to that top position the wrapping ScrollView 
            sv.scrollTo(0, top);                
        }

    });

您的代码有些奇怪(从我的角度来看),如果上面的代码不起作用,您应该发布有关您的布局文件和使用场景的更多详细信息。

于 2012-11-25T12:37:13.453 回答