Android 滚动时更改列表视图内容
我试图在列表视图中显示收件箱中的所有短信 问题: 启动“活动”时,在列表视图中正确填充消息。但是,当我向上或向下滚动时,中间和角落中的一些消息的内容会自动更改。我无法找到列表异常行为的原因。您能看看适配器类或代码的其他部分有什么问题吗 代码: 我正在使用以下自定义适配器填充ListViewAndroid 滚动时更改列表视图内容,android,listview,baseadapter,Android,Listview,Baseadapter,我试图在列表视图中显示收件箱中的所有短信 问题: 启动“活动”时,在列表视图中正确填充消息。但是,当我向上或向下滚动时,中间和角落中的一些消息的内容会自动更改。我无法找到列表异常行为的原因。您能看看适配器类或代码的其他部分有什么问题吗 代码: 我正在使用以下自定义适配器填充ListView import java.util.*; import android.app.Activity; import android.view.LayoutInflater; import android.view
import java.util.*;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class ListViewAdapter extends BaseAdapter {
private String FIRST_COLUMN = "First";
private String SECOND_COLUMN = "Second";
private String THIRD_COLUMN = "Third";
private String FOURTH_COLUMN = "Fourth";
private String FIFTH_COLUMN = "Fifth";
private String SIXTH_COLUMN = "Sixth";
String class_name="";
public ArrayList<HashMap<String, String>> list;
Activity activity;
TextView txtFirst;
TextView txtSecond;
TextView txtThird;
TextView txtFourth;
TextView txtFifth;
TextView txtSixth;
public ListViewAdapter(Activity activity,
ArrayList<HashMap<String, String>> list) {
super();
this.activity = activity;
this.list = list;
class_name = activity.getClass().toString();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.messages_row, null);
txtFirst = (TextView) convertView.findViewById(R.id.tvMsgId_msg);
txtSecond = (TextView) convertView.findViewById(R.id.tvCtId_msg);
txtThird = (TextView) convertView.findViewById(R.id.tvCtName_msg);
txtFourth = (TextView) convertView.findViewById(R.id.tvCtNo_msg);
txtFifth = (TextView) convertView.findViewById(R.id.tvMsgDate_msg);
txtSixth = (TextView) convertView.findViewById(R.id.tvSms_msg);
}
HashMap<String, String> map = list.get(position);
txtFirst.setText(map.get(FIRST_COLUMN));
txtSecond.setText(map.get(SECOND_COLUMN));
txtThird.setText(map.get(THIRD_COLUMN));
txtFourth.setText(map.get(FOURTH_COLUMN));
txtFifth.setText(map.get(FIFTH_COLUMN));
txtSixth.setText(map.get(SIXTH_COLUMN));
return convertView;
}
public void clear() {
list.clear();
this.notifyDataSetChanged();
}
}
import java.util.*;
导入android.app.Activity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.TextView;
导入android.widget.Toast;
公共类ListViewAdapter扩展了BaseAdapter{
私有字符串FIRST\u COLUMN=“FIRST”;
私有字符串SECOND\u COLUMN=“SECOND”;
私有字符串THIRD_COLUMN=“THIRD”;
私有字符串第四列=“第四”;
私有字符串FIFTH_COLUMN=“FIFTH”;
私有字符串第六列=“第六”;
字符串class_name=“”;
公共阵列列表;
活动;
TextView txtFirst;
TextView txtSecond;
TextView-txt3;
TextView-txt4;
文本视图txt5;
文本视图txt6;
公共ListViewAdapter(活动,
ArrayList(列表){
超级();
这个。活动=活动;
this.list=列表;
class_name=activity.getClass().toString();
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=活动。getLayoutInflater();
如果(convertView==null){
convertView=充气机。充气(R.layout.messages_行,空);
txtFirst=(TextView)convertView.findViewById(R.id.tvMsgId_msg);
txtSecond=(TextView)convertView.findViewById(R.id.tvCtId_msg);
txtThird=(TextView)convertView.findViewById(R.id.tvCtName_msg);
txtFourth=(TextView)convertView.findViewById(R.id.tvCtNo_msg);
txtFifth=(TextView)convertView.findViewById(R.id.tvMsgDate_msg);
txtSixth=(TextView)convertView.findViewById(R.id.tvSms_msg);
}
HashMap map=list.get(位置);
setText(map.get(第一列));
setText(map.get(第二列));
setText(map.get(第三列));
setText(map.get(第四列));
setText(map.get(第五列));
setText(map.get(第六列));
返回视图;
}
公共空间清除(){
list.clear();
this.notifyDataSetChanged();
}
}
下面是填充列表的代码部分
private void showInboxMessages() {
String SORT_ORDER = "date DESC";
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor cursor = this.getContentResolver().query(uriSms, null, null, null, SORT_ORDER);
if (cursor != null) {
cursor.moveToLast();
if (cursor.getCount() > 0) {
HashMap<String, String> contacts = new HashMap<String, String>();
int _id = 1;
do {
//String _id = cursor.getString(cursor.getColumnIndex("_id"));
String person = cursor.getString(cursor.getColumnIndex("person"));
String address = cursor.getString(cursor.getColumnIndex("address"));
if (person == null || person.equals("")) {
if (contacts.containsKey(address))
person = (String) contacts.get(address);
else {
person = Methods.getContactName(this, address);
contacts.put(address,person);
}
}
String body = cursor.getString(cursor.getColumnIndex("body"));
Long date = cursor.getLong(cursor.getColumnIndex("date"));
Date dateVal=new Date(date);
SimpleDateFormat dateFormat = new SimpleDateFormat(Constants.DATE_FORMAT2, Locale.getDefault());
String datetext = dateFormat.format(dateVal);
add_to_list(String.valueOf(_id), "", person, address, datetext, body);
_id ++;
} while (cursor.moveToPrevious());
}
}
}
private void add_to_list(String i, String n, String c, String d, String e, String f) {
HashMap<String, String> temp = new HashMap<String, String>();
temp.put(FIRST_COLUMN, i);
temp.put(SECOND_COLUMN, n);
temp.put(THIRD_COLUMN, c);
temp.put(FOURTH_COLUMN, d);
temp.put(FIFTH_COLUMN, e);
temp.put(SIXTH_COLUMN, f);
listarray.add(temp);
adapter.notifyDataSetChanged();
}
private void showInboxMessages(){
字符串SORT\u ORDER=“日期描述”;
Uri Uri=Uri.parse(“content://sms/inbox");
Cursor Cursor=this.getContentResolver().query(URI、null、null、null、排序顺序);
如果(光标!=null){
cursor.moveToLast();
如果(cursor.getCount()>0){
HashMap contacts=新的HashMap();
int _id=1;
做{
//String _id=cursor.getString(cursor.getColumnIndex(“_id”));
字符串person=cursor.getString(cursor.getColumnIndex(“person”);
字符串地址=cursor.getString(cursor.getColumnIndex(“地址”);
if(person==null | | person.equals(“”){
if(联系人地址)
person=(字符串)contacts.get(地址);
否则{
person=Methods.getContactName(这个,地址);
联系人。放置(地址、人员);
}
}
String body=cursor.getString(cursor.getColumnIndex(“body”);
longdate=cursor.getLong(cursor.getColumnIndex(“日期”));
Date dateVal=新日期(日期);
SimpleDataFormat dateFormat=新的SimpleDataFormat(Constants.DATE_FORMAT2,Locale.getDefault());
字符串datetext=dateFormat.format(dateVal);
将\添加到\列表中(String.valueOf(\ id),“”,person,address,datetext,body);
_id++;
}while(cursor.moveToPrevious());
}
}
}
私有void将\添加到\列表(字符串i、字符串n、字符串c、字符串d、字符串e、字符串f){
HashMap temp=新的HashMap();
温度输入(第一列,i);
温度输入(第二列,n);
温度输入(第三列,c);
温度输入(第四列,d);
温度输入(第五列,e);
温度输入(第六列,f);
添加(临时);
adapter.notifyDataSetChanged();
}
尝试移除适配器。notifyDataSetChanged()
从add_to_list方法,并在if(cursor.getCount()>0)
但在do While循环之后/之外添加此行 尝试删除适配器.notifyDataSetChanged()
从add_to_list方法,并在if(cursor.getCount()>0)
但在do While循环之后/之外添加此行 //复制并粘贴下面的代码,然后查看是否有更改。这必须是目前的工作。希望这有帮助。将“最终”设置为“所有视图/位置”,以不更改该值。
//Copy and paste code below then see if there is change. This must be work for now. Hope this help. Setting final to all view/position to not change the value.
import java.util.*;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class ListViewAdapter extends BaseAdapter {
private String FIRST_COLUMN = "First";
private String SECOND_COLUMN = "Second";
private String THIRD_COLUMN = "Third";
private String FOURTH_COLUMN = "Fourth";
private String FIFTH_COLUMN = "Fifth";
private String SIXTH_COLUMN = "Sixth";
String class_name="";
public ArrayList<HashMap<String, String>> list;
Activity activity;
TextView txtFirst;
TextView txtSecond;
TextView txtThird;
TextView txtFourth;
TextView txtFifth;
TextView txtSixth;
public ListViewAdapter(Activity activity,
ArrayList<HashMap<String, String>> list) {
super();
this.activity = activity;
this.list = list;
class_name = activity.getClass().toString();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
final LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.messages_row, null);
txtFirst = (TextView) convertView.findViewById(R.id.tvMsgId_msg);
txtSecond = (TextView) convertView.findViewById(R.id.tvCtId_msg);
txtThird = (TextView) convertView.findViewById(R.id.tvCtName_msg);
txtFourth = (TextView) convertView.findViewById(R.id.tvCtNo_msg);
txtFifth = (TextView) convertView.findViewById(R.id.tvMsgDate_msg);
txtSixth = (TextView) convertView.findViewById(R.id.tvSms_msg);
}
HashMap<String, String> map = list.get(position);
txtFirst.setText(map.get(FIRST_COLUMN));
txtSecond.setText(map.get(SECOND_COLUMN));
txtThird.setText(map.get(THIRD_COLUMN));
txtFourth.setText(map.get(FOURTH_COLUMN));
txtFifth.setText(map.get(FIFTH_COLUMN));
txtSixth.setText(map.get(SIXTH_COLUMN));
return convertView;
}
public void clear() {
list.clear();
this.notifyDataSetChanged();
}
}
导入java.util.*;
导入android.app.Activity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.Vi
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_entry, null);
holder = new ViewHolder();
holder.nameTextView = (TextView) convertView.findViewById(R.id.person_name);
holder.surnameTextView = (TextView) convertView.findViewById(R.id.person_surname);
holder.personImageView = (ImageView) convertView.findViewById(R.id.person_image);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
Person person = getItem(position);
holder.nameTextView.setText(person.getName());
holder.surnameTextView.setText(person.getSurname());
//holder.personImageView.setImageBitmap(person.getImage());
return convertView;
}
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class CustomAdapter extends ArrayAdapter<Message> {
private ArrayList<Message> dataItems;
Context context;
public CustomAdapter(Context context, ArrayList<Message> items) {
super(context, R.layout.messages_row, items);
this.context = context;
this.dataItems = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.messages_row, parent, false);
TextView _id = (TextView) convertView.findViewById(R.id.tvMsgId_msg);
TextView ctId = (TextView) convertView.findViewById(R.id.tvCtId_msg);
TextView ctName = (TextView) convertView.findViewById(R.id.tvCtName_msg);
TextView ctNo = (TextView) convertView.findViewById(R.id.tvCtNo_msg);
TextView msgDate = (TextView) convertView.findViewById(R.id.tvMsgDate_msg);
TextView msg = (TextView) convertView.findViewById(R.id.tvSms_msg);
Message obj = (Message) dataItems.get(position);
_id.setText(String.valueOf(obj.get_id()));
ctId.setText(String.valueOf(obj.getContact_id()));
ctName.setText(String.valueOf(obj.getContact_Name()));
ctNo.setText(String.valueOf(obj.getContact_No()));
msgDate.setText(String.valueOf(obj.getSms_date()));
msg.setText(String.valueOf(obj.getSms()));
return convertView;
}
}