【问题标题】:List View Showing Redundent data in android在android中显示冗余数据的列表视图
【发布时间】:2014-07-03 21:44:48
【问题描述】:

抱歉再次问这个问题,但我在上一个问题中没有得到任何解决方案,所以再次抱歉 我在模拟器上构建和运行项目时得到重复数据 这是我的代码

railcode.java

public class RailCode extends Activity implements OnItemClickListener {

String[] member_names;
String[] contactType;

List<RowCode> rowCode;
ListView mylistview;

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

    rowCode = new ArrayList<RowCode>();

    member_names = getResources().getStringArray(R.array.member_names);


    contactType = getResources().getStringArray(R.array.contactType);

    for (int i = 0; i < member_names.length; i++) {
        RowCode code = new RowCode(member_names[i],contactType[i]);
        rowCode.add(code);
    }

    mylistview = (ListView) findViewById(R.id.list);
    CustomAdapter adapter = new CustomAdapter(this, rowCode);
    mylistview.setAdapter(adapter);
    mylistview.setOnItemClickListener(this);

}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
    String member_name = rowCode.get(position).getMember_name();
    Toast.makeText(getApplicationContext(), "" + member_name,
            Toast.LENGTH_SHORT).show();
 }

}

CustonAdapter.java

public class CustomAdapter extends BaseAdapter {

Context context;
List<RowCode> rowItems;

public CustomAdapter(Context context, List<RowCode> rowItems) {
    this.context = context;
    this.rowItems = rowItems;
}

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

@Override
public Object getItem(int position) {
    return rowItems.get(position);
}

@Override
public long getItemId(int position) {
    return rowItems.indexOf(getItem(position));
}

/* private view holder class */
private class ViewHolder {
    TextView member_name;

    TextView contactType;
}

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

    ViewHolder holder = null;

    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_code, null);
        holder = new ViewHolder();

        holder.member_name = (TextView) convertView
                .findViewById(R.id.member_name);
        holder.contactType = (TextView) convertView
                .findViewById(R.id.contact_type);

        RowCode row_pos = rowItems.get(position);

        holder.member_name.setText(row_pos.getMember_name());
        holder.contactType.setText(row_pos.getContactType());

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    return convertView;
}

}

请帮助我,我无法理解它显示的重复数据 提前致谢!!!!!!1

【问题讨论】:

  • RowCodeholder.*.setText() 行移到if-else之后return 之前。
  • 不是问题paresh..
  • 谢谢你,迈克,我现在知道了,没有冗余数据:)

标签: java android android-listview android-listfragment


【解决方案1】:
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_code, null);
            holder = new ViewHolder();

            holder.member_name = (TextView) convertView
                    .findViewById(R.id.member_name);
            holder.contactType = (TextView) convertView
                    .findViewById(R.id.contact_type);



            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
// put here ..... after else condition
            RowCode row_pos = rowItems.get(position);

            holder.member_name.setText(row_pos.getMember_name());
            holder.contactType.setText(row_pos.getContactType());

    return convertView;
    }

希望成功

【讨论】:

  • mike ans me early then you and you have copy it answer
  • @Paresh 请再次检查你会发现..我已经把 RowCode row_pos = rowItems.get(position); if else 条件外行。
  • 你不能把RowCode row_pos = rowItems.get(position);在 if 条件内行 .. 因为当 if 条件为假时,您会得到重复的数据.................................................. ...........以前分配的数据。
  • mike 也说过,你可以在我的问题的第一条评论中看到这一点
  • 我没有阅读他的评论我只是检查了他的答案我发现了错误。所以我只是纠正它:)
【解决方案2】:

公共类 CustomAdapter 扩展 BaseAdapter {

Context context;
List<RowCode> rowItems;

public CustomAdapter(Context context, List<RowCode> rowItems) {
    this.context = context;
    this.rowItems = rowItems;
}

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

@Override
public Object getItem(int position) {
    return rowItems.get(position);
}

@Override
public long getItemId(int position) {
    return rowItems.indexOf(getItem(position));
}

/* private view holder class */
private class ViewHolder {
    TextView member_name;

    TextView contactType;
}

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

    ViewHolder holder = null;

    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_code, null);
        holder = new ViewHolder();

        holder.member_name = (TextView) convertView
                .findViewById(R.id.member_name);
        holder.contactType = (TextView) convertView
                .findViewById(R.id.contact_type);

        RowCode row_pos = rowItems.get(position);



        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
        holder.member_name.setText(row_pos.getMember_name());
        holder.contactType.setText(row_pos.getContactType());
    return convertView;
}

}

【讨论】:

    最近更新 更多