#java #android #android-listview #android-listfragment
#java #Android #android-listview #android-listfragment
Вопрос:
Извините, что снова задаю этот вопрос, но я не получаю никакого решения в предыдущем вопросе, поэтому srry снова я получаю дубликаты данных во время сборки и запуска проекта на эмуляторе вот мой код для
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
Комментарии:
1. Переместите строки
RowCode
иholder.*.setText()
в послеif-else
блока, передreturn
.2. пока это не проблема..
3. Спасибо, Майк, я понял это прямо сейчас, никаких избыточных данных 🙂
Ответ №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;
}
Надеюсь, это сработало
Комментарии:
1. майк спрашивает меня раньше, чем вы, и вы должны скопировать ответ
2. @Paresh пожалуйста, проверьте еще раз, вы найдете это.. я поместил код строки row_pos = rowItems.get (позиция); строка вне условия if else.
3. вы не можете поместить RowCode row_pos = rowItems.get(position); строку внутри условия if .. потому что, когда условие if становится ложным, вы получаете дублирующиеся данные………………………………….. предыдущие назначенные данные.
4. майк тоже это сказал, вы можете видеть это в первом комментарии к моему вопросу
5. я не читал его комментарий, я просто проверил его ответ, я нашел ошибку. поэтому я просто исправляю это 🙂
Ответ №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;
}
}