listview getChildAt()返回null

时间:2015-07-03 12:17:31

标签: android listview android-listview

我一直在研究一个Android项目并遇到问题。我用Google搜索但没有找到答案。 在我的项目中,有一个名为lv_showquran的片段,它包含一个id为null的列表视图。

我想在指定的索引处突出显示listview的视图。我使用listview.getchildat()但它返回public class ViewSurahFragment extends Fragment { private ListView listView; private int currentSurah; private String surahName; private DatabaseHelper databaseHelper; private ArrayAdapter<String> arrayAdapter; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // this.listView = (ListView) getActivity().findViewById(R.id.lv_showQuran); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); this.listView = (ListView) getActivity().findViewById(R.id.lv_showQuran); } private void displayAyas() { String[] values = this.getSurahAyas(); this.listView.setItemsCanFocus(true); this.arrayAdapter = new ArrayAdapter<>(this.getActivity().getApplicationContext(), R.layout.layout_surah_ayah, values); this.listView.setAdapter(this.arrayAdapter); this.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } }); registerForContextMenu(this.listView); } public void highlightAyah(int ayahNum) { TextView view = (TextView) this.listView.getChildAt(ayahNum - 1); Log.i("ViewSurahFragment", "List View Child Counts Are: " + this.listView.getChildCount()); if(view == null) Log.i("ViewSurahFragment", "view is null"); } } 值 这是viewsurahfragment的代码。不相关的功能被激活。

onactivitycreated

不管是否在onviewcreatedhighlightayah中使用了以下代码行,它在this.listView = (ListView) getActivity().findViewById(R.id.lv_showQuran); 函数中调用listview.getchildat()时返回null。< / p>

ListView view = (ListView) getActivity().findViewById(R.id.lv_showQuran);
TextView v = (TextView) view.getChildAt(ayahNum);
Log.i("ViewSurahFragment", "List View Child Counts Are: " + view.getChildCount());

if(v == null)
    Log.i("ViewSurahFragment", "view is null");

我也尝试过做,但它对我来说也没有用。

getchildviewcount() return 0

但有趣的是,在我使用的任何一个解决方案中{{1}}都是{{1}},但是项目会显示在列表视图中。
任何人都可以告诉我我在哪里做错了 在此先感谢您的帮助。

4 个答案:

答案 0 :(得分:10)

这会产生null:

 TextView textView = (TextView) listView.getChildAt(0);
 Log.i("item", textView.getText().toString());

这不是:

    TextView textView = (TextView) listView.getAdapter().getView(0, null, listView);
    Log.i("item", textView.getText().toString());

此示例使用android.R.layout.simple_list_item_1,因此请记住,TextView是simple_list_item_1中的根视图。

答案 1 :(得分:1)

private void highlightListView(int position)
{

    try
    {
        int i = 0;
        int count2 = alAudio.size();
        for (i = 0; i < count2; i++)
        {

            View view = lstvwSongs.getChildAt(i - lstvwSongs.getFirstVisiblePosition());
            ViewHolder viewHolder = (ViewHolder) lstvwSongs.getAdapter().getView(i, view, lstvwSongs).getTag();

                if (i == position)
                {
                    viewHolder.txtvwTitle.setTextColor(color_item_highlight);
                }
                else
                {
                    viewHolder.txtvwTitle.setTextColor(color_item_normal);
                }
        }           
    }
    catch (Exception e)
    {           
        e.printStackTrace();
    }
}

这是高亮显示列表视图项目的最简单方法。

我希望这对你有所帮助。

答案 2 :(得分:0)

因此,当您致电getChildCount()时 - 您的listView为空。看起来您在使用displayAyas()方法将内容放入其中之前调用它。

检查调用displayAyas()的位置。因为项目被显示 - 我想它被称为活动中的某个地方。把它放在getChildCount()之前。

答案 3 :(得分:0)

在适配器上使用 getView 方法,而不是在列表视图上使用 getChildAt

listview.getAdapter().getView(i, null, null)