android按钮刷新
问题描述:
我正在构建一个基于android的应用程序来执行twitter搜索功能。按钮点击仅适用于第一个。如果我更改搜索词并再次单击该按钮,则无法刷新。任何人都可以给我一个提示? `公共类TwitterSActivity扩展活动实现OnClickListener { EditText etQuery; Button btnQuery;android按钮刷新
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;}
}`
答
最后我搞清楚,这是我如何解决它: 我改变ArrayList<Tweet> tweets = new ArrayList<Tweet>();
到final ArrayList<Tweet> tweets = new ArrayList<Tweet>();
然后的onClick()方法下移动。没有notifyDataSetChanged(),它运行良好。
当我添加下面的代码:Intent reload = new Intent(TwitterSActivity.this,TwitterSActivity.class); \t \t startActivity(reload);在onclick {}方法下,它现在可以刷新。但是另一个问题是内容仅出现2秒,然后消失。有人知道为什么 –
我认为你需要做的是隔离新的tweets是否没有被检索(getInternetData问题)或没有被刷新/显示(问题设置值到ListView中)。设置一些breakpoints/log.d语句,看看你是否从getInternetData获得了期望。 – Gophermofur
另外:1)您无需每次都重新创建并重新连接适配器。一旦你调用了tweets.add(...),你已经修改了父列表,所以你所要做的就是在适配器上调用'notifyDataSetChanged()'来强制ListView重新绘制自己。 2)将你的listview声明为一个类变量,所以你不必在每次尝试搜索时都调用findByView。 – Gophermofur