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