Android ArrayList适配器仅在手动添加对象后更新视图

Android ArrayList适配器仅在手动添加对象后更新视图,android,android-arrayadapter,android-view,Android,Android Arrayadapter,Android View,对不起,标题很糟糕 基本上我有一个适配器aa=新的tweetAdapter(this,resID,tweetListFull)只有在我使用aa.add然后aa.notifyDataSetChanged()之后才会更新。我的理解是,这应该适用于tweetListFull.add然后aa.notifyDataSetChanged() 因此,当我使用aa.add(tweetListFull.get(0))和aa.notifyDataSetChanged()时,视图会按预期添加。虽然从我的想法来看,我认

对不起,标题很糟糕

基本上我有一个适配器
aa=新的tweetAdapter(this,resID,tweetListFull)
只有在我使用
aa.add
然后
aa.notifyDataSetChanged()
之后才会更新。我的理解是,这应该适用于
tweetListFull.add
然后
aa.notifyDataSetChanged()

因此,当我使用
aa.add(tweetListFull.get(0))
aa.notifyDataSetChanged()
时,视图会按预期添加。虽然从我的想法来看,我认为将项目添加到tweetListFull列表中,然后
aa.notifyDataSetChanged()
也应该可以,但实际上不行吗

主要活动
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
render=新的tweetView(该视图);
LinearLayout画布=(LinearLayout)findViewById(R.id.content\u frame);
ListView tweetList=(ListView)findViewById(R.id.tweetView);
tweetListFull=新的ArrayList();
int resID=R.layout.tweet;
aa=新的tweetAdapter(this、resID、tweetListFull);
日志w(“检查”、“此处1”);
tweetList.setAdapter(aa);
日志w(“检查”、“此处1”);
//tweetList.addView()
canvas.addView(渲染);
//UI//
DroperListViewItems=getResources().getStringArray(R.array.items);
//获取在activity_main.xml中定义的ListView
抽屉列表视图=(列表视图)findViewById(R.id.left\u抽屉);
//设置列表视图的适配器
setAdapter(新的ArrayAdapter(this,R.layout.drawer_listview_项,drawerListViewItems));
Button.OnClickListener侦听器=新建Button.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(v.getId()==R.id.Refresh){
twitterTest tweet=新建twitterTest();
execute(-3.19523741,56.21523879);//此参数是要搜索的查询。
}
else if(v.getId()==R.id.Load){
Log.w(“Load1”,String.valueOf(tweetListFull));
Log.w(“Load1”,String.valueOf(tweetListFull.size());
//aa.add(tweetListFull.get(2));
aa.notifyDataSetionValidated();
aa.notifyDataSetChanged();
}               
}
};
((按钮)findviewbyd(R.id.Refresh)).setOnClickListener(监听器);
((按钮)findviewbyd(R.id.Load)).setOnClickListener(监听器);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
tweetAdapter
package com.example.networkingcoursework;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.Context;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.LinearLayout;
导入android.widget.TextView;
公共类tweetAdapter扩展了ArrayAdapter{
智力资源;
公共tweetAdapter(上下文、int资源、ArrayList对象){
超级(\u上下文、\u资源、\u对象);
资源=_资源;
Log.w(“Test222”、“Test3:+String.valueOf(_resource));
Log.w(“Test222”,“Test3:+String.valueOf(_objects.size()));
//TODO自动生成的构造函数存根
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
w(“Test222”,“Test22!”);
线性布局视图;
Tweet-Tweet=getItem(位置);
w(“Test222”,“Test!”);
long tweetId=tweet.getId();
if(convertView==null){
tweetView=newlinearLayout(getContext());
字符串充气器=Context.LAYOUT\u充气器\u服务;
LayoutInflater vi=(LayoutInflater)getContext().getSystemService(充气机);
vi.膨胀(资源、推特视图、真实);
}
否则{
tweetView=(LinearLayout)convertView;
}
TextView-idView=(TextView)tweetView.findViewById(R.id.tweetText);
idView.setText(String.valueOf(tweetId));
w(“Test222”,“Test!”);
返回tweet视图;
}

}

notifyDataSetChanged仅在向tweetListFull添加一个或多个项目时有效;您可以这样做:

((Button)findViewById(R.id.Load)).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 tweetListFull.add(yourNewItem);
                 aa.notifyDataSetChanged();
            }
        });

}

ArrayAdapter要求您通过添加、添加全部、清除、删除直接使用它,而不是通过阵列本身。。如果需要使用阵列本身而不是适配器,则需要改用BaseAdapter。
package com.example.networkingcoursework;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class tweetAdapter extends ArrayAdapter<Tweet>{

int resource;

public tweetAdapter(Context _context, int _resource,ArrayList<Tweet> _objects) {
    super(_context, _resource, _objects);
    resource = _resource;
    Log.w("Test222","Test3:"+String.valueOf(_resource));
    Log.w("Test222","Test3:"+String.valueOf(_objects.size()));

    // TODO Auto-generated constructor stub
}


@Override
public View getView(int position, View convertView, ViewGroup parent){
    Log.w("Test222","Test22!");
    LinearLayout tweetView;
    Tweet tweet = getItem(position);
    Log.w("Test222","Test!");

    long tweetId = tweet.getId();

    if(convertView == null){
        tweetView = new LinearLayout(getContext());
        String inflater = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
        vi.inflate(resource,tweetView, true);
    }
    else{
        tweetView = (LinearLayout) convertView;     
    }

    TextView idView = (TextView)tweetView.findViewById(R.id.tweetText);
    idView.setText(String.valueOf(tweetId));
    Log.w("Test222","Test!");
    return tweetView;

}
((Button)findViewById(R.id.Load)).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 tweetListFull.add(yourNewItem);
                 aa.notifyDataSetChanged();
            }
        });