从ArrayAdapter类中更改ListView分隔符?

3

我有一个类(foo)继承自ListActivity,它实例化了一个类(fooAdap)继承自ArrayAdapter。在fooAdap中,有一个getview()方法,我在其中填充我的ListView。

从foo类中,我可以调用getListView().setDividerHeight(0)并使分隔线消失。是否有一种方法可以从fooAdap的getView()方法中访问该方法?

foo.java

public class foo extends ListActivity
{
   ...
   protected void onCreate (Bundle savedInstanceState)
   {
      super.onCreate (savedInstanceState);
      ...
      ListView lv = getListView ();
      lv.setDividerHeight (0);
      fooAdap foo = new fooAdap (this,android.R.layout.simple_list_item_single_choice, mRowData);
      ...
   }

fooAdap.java

public class fooAdap extends ArrayAdapter
{
   ...

   public View getView (int position, View convertView, ViewGroup parent)
   {
      ...

      switch (position)
      {
         case 1: // show divider for these rows in listview
         case 2:
         break;

         case 3: // hide divider for this row in listview
         break;
      }
      ...
   }
}

我的回答有帮助吗?如果没有,请告诉我,我会为您解决。谢谢。 - SALMAN
2个回答

0

你需要将 currentActivity 对象传递给 fooAdap,然后就可以轻松地完成操作。

或者你可以通过 fooAdap 构造函数传递该 Activity 对象。

 Activity currentActivity=foo.this;

     fooAdap foo = new fooAdap (this,android.R.layout.simple_list_item_single_choice, mRowData);
    foo.currentActivity=currentActivity;


    public class fooAdap extends ArrayAdapter
    {
    Activity currentActivity;

    public View getView (int position, View convertView, ViewGroup parent)
       {
          ...

          switch (position)
          {
             case 1: // show divider for these rows in listview

             case 2:
             break;

             case 3: // hide divider for this row in listview
              this.currentActivity.getListView().setDividerHeight(0);
             break;
          }
          ...
       }


    }

这肯定会对你有所帮助。

谢谢


感谢您的建议。这确实让我能够访问getListView(),但会在滚动时导致它绘制得很奇怪。还在进行实验。 - wufoo

0

最终我自己制作了一个分隔符,并在XML布局中将ListView dividerHeight()设置为0。

我为ListView行添加了一个单独的布局,并在那里添加了另一个LinearLayout和TextView。然后,我从android sdk目录中复制了文件divider_horizontal_dark.9.png到我的res/目录中,并将新TextView的背景设置为它,同时将textview的MaxHeight设置为1dp。

现在我只需在getView()方法中切换LinearLayout以View.VISIBLE或View.GONE。虽然这是一种比较麻烦的方式,但似乎可以实现我想要的效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接