无法从ListView获取项目

时间:2011-07-11 07:07:50

标签: android

我有这个类,但是没有点击监听器我无法获取ListView项目......我只是想更新onResume上的文本颜色......

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setListAdapter( new ArrayAdapter<String>(this, R.layout.overlay_options, FishSpecie.getFishSpecies()));

    mList = getListView();
    mList.setTextFilterEnabled(true);
    mList.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            Boolean status = doClick(((TextView) arg1).getText());
            if(status == true)
            {
                ((TextView) arg1).setTextColor(Color.GREEN);
                Toast.makeText(getApplicationContext(), ((TextView) arg1).getText() + " Enabled", Toast.LENGTH_SHORT).show();
            }
            else
            {
                ((TextView) arg1).setTextColor(Color.DKGRAY);
                Toast.makeText(getApplicationContext(), ((TextView) arg1).getText() + " Disabled", Toast.LENGTH_SHORT).show();
            }               
        }           
    });

    // Create all the overlay check boxes and labels
}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    updateList();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    updateList();
}

protected void updateList() {
    mList = getListView();

    for (int i = 0; i < mList.getChildCount(); i++)
    {
        View v = mList.getChildAt(i);
        TextView tx = (TextView) v.findViewById(R.layout.overlay_options);
        if(FishSpecie.isFishSpecieEnabled(tx.getId()) == true) {
            // Change color of list item
            tx.setTextColor(Color.GREEN);
        }
        else
        {
            tx.setTextColor(Color.DKGRAY);
        }
    }
}

查看v = mList.getChildAt(i);这从未找到孩子

澄清mList.getChildCount()始终返回0

我想我几乎已经修好了但是我无法理解为什么颜色变化没有影响......下面是更新功能的新代码

protected void updateList() {

    for (int i = 0; i < mArray.getCount();i++) {
        //TextView v = (TextView)(findViewById((int) mArray.getItemId(i)));
        TextView v = (TextView) mArray.getView(i, null , null);
        String text = (String) v.getText();
        if(FishSpecie.isFishSpecieEnabled(i) == true) {
            // Change color of list item
            v.setTextColor(Color.GREEN);
        }
        else
        {
            v.setTextColor(Color.DKGRAY);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

搜索文字视图时,您可能希望R.id.overlay_options不是R.layout.overlay_options


更新

不确定为什么你会得到0个子计数但是你的方法可能不会起作用,因为这些视图被重用于不同的项目。更好的方法可能是在适配器上自定义getView方法以显示正确的颜色。