Android 安卓按钮刷新

Android 安卓按钮刷新,android,button,refresh,Android,Button,Refresh,我正在构建一个基于android的应用程序来实现twitter搜索功能。单击按钮仅适用于第一次。如果我更改搜索词并再次单击按钮,则无法刷新。谁能给我一个提示? `公共类TwitterSActivity扩展了活动实现OnClickListener{ 编辑文本查询; 按钮查询 class Tweet{ public String username; public String message; public String image_url; } ArrayList<

我正在构建一个基于android的应用程序来实现twitter搜索功能。单击按钮仅适用于第一次。如果我更改搜索词并再次单击按钮,则无法刷新。谁能给我一个提示? `公共类TwitterSActivity扩展了活动实现OnClickListener{ 编辑文本查询; 按钮查询

class Tweet{
    public String username;
    public String message;
    public String image_url;
}

ArrayList<Tweet> tweets = new ArrayList<Tweet>();

@Override
public void onCreate(Bundle savedInstanceState) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    etQuery = (EditText) findViewById (R.id.et);
    btnQuery = (Button) findViewById (R.id.btn);
    btnQuery.setOnClickListener(this);
}


@Override
public void onClick(View v){

    if(v.getId() == R.id.btn){
        Toast.makeText(this, "Query submitted", Toast.LENGTH_LONG).show();

        Getdata getdata = new Getdata();
        String returned = null;
        String searchTerm = etQuery.getText().toString();
        try {
            returned = getdata.getInternetData(searchTerm);
        } catch (Exception e) {
            e.printStackTrace();
        }

        try{
            JSONObject jo = new JSONObject(returned);
            JSONArray ja = jo.getJSONArray("results");
            for(int i=0; i<ja.length(); i++){
                JSONObject job = ja.getJSONObject(i);
                Tweet tt = new Tweet();
                tt.username = job.getString("from_user");
                tt.message = job.getString("text");
                tt.image_url = job.getString("profile_image_url");
                tweets.add(tt);
            }
        }
        catch(JSONException e){
            Log.e("log_tag", "Error parsing data: "+e.toString());
        }

        ListView lv = (ListView) findViewById(R.id.listView1);

        class FancyAdapter extends ArrayAdapter<Tweet> {

            public FancyAdapter() {
                super(TwitterSActivity.this, android.R.layout.simple_list_item_1, tweets);
            }

            public View getView(int position, View convertView, ViewGroup parent){
                ViewHolder holder;
                if(convertView == null){
                    LayoutInflater inflater = getLayoutInflater();
                    convertView = inflater.inflate(R.layout.listitem, null);
                    holder = new ViewHolder(convertView);
                    convertView.setTag(holder);
                }
                else
                {
                    holder = (ViewHolder)convertView.getTag();
                }
                holder.populatefrom(tweets.get(position));
                return(convertView);
            }


            class ViewHolder {
                public TextView username = null;
                public TextView message = null;
                public ImageView image = null;

                ViewHolder(View listitem){
                    username = (TextView)listitem.findViewById(R.id.username);
                    message = (TextView)listitem.findViewById(R.id.message);
                    image = (ImageView)listitem.findViewById(R.id.avatar);
                }

                void populatefrom(Tweet t){
                    username.setText(t.username);
                    message.setText(t.message);
                    image.setImageBitmap(getBitmap(t.image_url));
                }
            }
        }

        FancyAdapter ar = new FancyAdapter();
        lv.setAdapter(ar);

    }
}

public Bitmap getBitmap(String bitmapUrl) {
    try {
        URL url = new URL(bitmapUrl);
        return BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
    }
    catch(Exception e) {return null;}
}`
class Tweet{
公共字符串用户名;
公共字符串消息;
公共字符串图像的url;
}
ArrayList tweets=新建ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etQuery=(EditText)findViewById(R.id.et);
b查询=(按钮)findViewById(R.id.btn);
btnQuery.setOnClickListener(this);
}
@凌驾
公共void onClick(视图v){
if(v.getId()==R.id.btn){
Toast.makeText(此“查询已提交”,Toast.LENGTH_LONG).show();
Getdata Getdata=新建Getdata();
返回的字符串=null;
字符串searchTerm=etQuery.getText().toString();
试一试{
返回=getdata.getInternetData(searchTerm);
}捕获(例外e){
e、 printStackTrace();
}
试一试{
JSONObject jo=新JSONObject(返回);
JSONArray ja=jo.getJSONArray(“结果”);

对于(int i=0;i最后我找到了它,下面是我如何修复它的: 我将
ArrayList tweets=new ArrayList();
更改为
final ArrayList tweets=new ArrayList();

然后将其移动到onClick()方法下。它在不通知DataSetChanged()的情况下运行良好。

当我添加以下代码时:Intent reload=new Intent(TwitterSActivity.this,TwitterSActivity.class);startActivity(reload);onClick{}下方法,它现在可以刷新。但另一个问题是,内容只出现2秒,然后就消失了。有人知道为什么吗?我认为您需要做的是隔离新tweet是否没有被检索(getInternetData有问题)或没有被刷新/显示(ListView中的问题设置值)。设置一些断点/log.d语句,看看您是否从getInternetData获得了预期的结果。另外:1)您不需要每次都重新创建和连接适配器。调用tweets.add(…)后,您已经修改了父列表,所以只需调用
notifyDataSangeetched()
在适配器上,该适配器应强制ListView重新绘制自身。2)将ListView声明为类变量,这样您就不必每次有人尝试搜索时都调用findByView。我已经用Toast消息签出了它。internet数据更新没有问题。问题发生在将值更新到ListView上。当我添加notifyDataSetChanged(),它仍不刷新。。。