列表视图在滚动时显示重复的项目

时间:2015-02-15 18:39:40

标签: android listview

我想知道我在Android中遇到的这个问题。

我从ArrayAdapter填充ArrayList。这些条目很好而且很独特,但当我向下滚动listview时,它会继续读取现有元素。

我该如何避免这种情况?

这是我的代码。

ArrayList<String> channelname = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_list_channels);

      listchannels();

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.mylistchannel,R.id.Channelname,channelname);
      setListAdapter(adapter);
}

public void listchannels()
{
      InputStreamReader inputreader = new InputStreamReader(testFile.getReadStream());
      BufferedReader buffreader = new BufferedReader(inputreader);

      do {
            key = buffreader.readLine();
            if(key != null)
                value = buffreader.readLine();
            channelname.add(key);                
      } while (key != null && value != null);
}

1 个答案:

答案 0 :(得分:0)

以下是我在手机上放置并测试并运行良好的示例,根据您的需要进行修改,我将listView添加到我的布局文件中,

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:cacheColorHint="@android:color/white"
    android:choiceMode="singleChoice"
    android:drawSelectorOnTop="true"
    android:overScrollMode="ifContentScrolls"
    android:scrollbarAlwaysDrawVerticalTrack="true"
    android:scrollbarStyle="insideOverlay" >
</ListView>

然后我添加了一个新的布局xml文件,用于定义列表视图中每个项目的内容,我称之为channelinfo.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="145dp"
        android:background="#ffffff"
        android:gravity="center"
        android:padding="3dp"
        android:textAlignment="gravity" >

        <TextView
            android:id="@+id/channel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Channel"
            android:textColor="#000000"
            android:textSize="30sp"
            android:textStyle="bold|italic" />
    </LinearLayout>

以下是我的活动中的代码,该代码使用项列表

调用和填充listView
ArrayList<String> channelname = new ArrayList<String>();
  channelname.add("Test1");
  channelname.add("Test2");
  channelname.add("Test3");
  channelname.add("Test4");
  channelname.add("Test5");
  channelname.add("Test6");

  final ListView listView = (ListView) findViewById(R.id.listView1);
  ChannelAdapter cAdapter = new ChannelAdapter(this, channelname);
  listView.setAdapter(cAdapter);

private class ChannelAdapter extends ArrayAdapter<String> {
  ArrayList<String> channelname;
  public ChannelAdapter(Context context, ArrayList<String> channelname) {
    super  (context, R.layout.activity_fullscreen, channelname);
    this.channelname = channelname;
  }

  public View getView(int position, View convertView, ViewGroup parent) {
    try {
      if(convertView==null) {
        LayoutInflater inflater = getLayoutInflater();
        convertView = inflater.inflate(R.layout.channelinfo,parent, false);
      }  
      String  name = getItem(position);
      TextView txtview = (TextView) convertView.findViewById(R.id.channel);
      txtview.setText(name);
      return convertView;
    }
    catch(Exception e){
    }
    return null;
  }

  @Override
  public int getCount() {
    return channelname.size();
  }

  @Override
  public String getItem(int position) {
    return channelname.get(position);
  }

  @Override
  public long getItemId(int position) {
    return 0;
  }
}