Reputation: 613
I have created an adapter which extends the BaseAdapter. Following is the class:
class LocalAdapter extends BaseAdapter{
private Context context;
public LocalAdapter(Context ctx){
context=ctx;
}
@Override
public int getCount() {
return messages.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view==null){
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.chat_list_item,viewGroup,false);
}
TextView rightView = (TextView)view.findViewById(R.id.rightAligned);
TextView leftView = (TextView)view.findViewById(R.id.leftAligned);
if(messages.get(i).getFrom().equals(UserInfo.getMobileNumber())){
rightView.setText(messages.get(i).getMessage());
leftView.setVisibility(View.GONE);
}
else{
leftView.setText(messages.get(i).getMessage());
rightView.setVisibility(View.GONE);
}
return view;
}
}
The adapter can access the ArrayList from the main class. It has around 30 items. Now when I load the List all the items are loaded, but when scrolling through the list, some items get on disappearing on scroll.
Please provide solution for it.
Upvotes: 2
Views: 979
Reputation: 24848
Try this way,hope this will help you to solve your problem.
class LocalAdapter extends BaseAdapter {
private Context context;
public LocalAdapter(Context ctx){
context=ctx;
}
@Override
public int getCount() {
return messages.size();
}
@Override
public Object getItem(int i) {
return messages.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if(view==null){
viewHolder = new ViewHolder();
view = LayoutInflater.from(context).inflate(R.layout.chat_list_item, viewGroup, false);
viewHolder.rightView = (TextView)view.findViewById(R.id.rightAligned);
viewHolder.leftView = (TextView)view.findViewById(R.id.leftAligned);
}else{
viewHolder = (ViewHolder) view.getTag();
}
if(messages.get(i).getFrom().equals(UserInfo.getMobileNumber())){
viewHolder.rightView.setText(messages.get(i).getMessage());
viewHolder.leftView.setVisibility(View.GONE);
viewHolder.rightView.setVisibility(View.VISIBLE);
}else{
viewHolder.leftView.setText(messages.get(i).getMessage());
viewHolder.rightView.setVisibility(View.GONE);
viewHolder.leftView.setVisibility(View.VISIBLE);
}
return view;
}
class ViewHolder{
TextView rightView;
TextView leftView;
}
}
Upvotes: 0
Reputation: 3195
You are probably not calling setVisiblity(View.VISIBLE) only hiding view, fix it this way:
if (messages.get(i).getFrom().equals(UserInfo.getMobileNumber())){
rightView.setText(messages.get(i).getMessage());
leftView.setVisibility(View.GONE);
rightView.setVisibility(View.VISIBLE);
} else {
leftView.setText(messages.get(i).getMessage());
rightView.setVisibility(View.GONE);
leftView.setVisibility(View.VISIBLE);
}
Upvotes: 3