我試圖通過單擊按鈕來刷新我的列表視圖。我用notifyDataSetChanged
但它不令人耳目一新。通過點擊android上的按鈕刷新列表視圖
static final String TAG_RESULTS="results";
static final String TAG_TWEET="text";
static final String TAG_USER_ID = "from_user_id_str";
static final String TAG_USER_NAME = "from_user";
static final String TAG_PIC_URL="profile_image_url";
static final String TAG_TWEET_ID="id_str";
//static final String URL="http://search.twitter.com/search.json?q=";
static final String URL="https://api.twitter.com/1.1/search/tweets.json?q=";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tweet);
String url = getIntent().getStringExtra("url");
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(url);
Log.i("deneme", json.toString());
try {
results = json.getJSONArray(TAG_RESULTS);
tweets=new String[results.length()];
user_ids=new String[results.length()];
user_names=new String[results.length()];
pic_urls=new String[results.length()];
tweet_ids=new String[results.length()];
for(int i = 0; i < results.length(); i++){
JSONObject c = results.getJSONObject(i);
tweets[i]= c.getString(TAG_TWEET);
user_ids[i]= c.getString(TAG_USER_ID);
user_names[i]= "@"+c.getString(TAG_USER_NAME);
pic_urls[i]= c.getString(TAG_PIC_URL);
tweet_ids[i]= c.getString(TAG_TWEET_ID);
}
} catch (JSONException e) {
e.printStackTrace();
}
lv= (ListView) findViewById(R.id.listView);
final LazyAdapter adapter = new LazyAdapter(this, pic_urls, user_names, tweets);
lv.setAdapter(adapter);
refreshButton= (ImageButton) findViewById(R.id.imageButton);
refreshButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(TweetActivity.this,"tık tık", Toast.LENGTH_LONG).show();
adapter.notifyDataSetChanged();
}
});
}}
而且也是我寫這我的適配器
public void notifyDataSetChanged() { super.notifyDataSetChanged(); }
有什麼問題嗎?
你還沒有更改任何關於按鈕點擊的數據?並使用Asynctask在您的視圖中獲取數據和綁定。 – Oam
@Oam我從Web服務獲取數據。數據總是在那裏變化,但是當我點擊按鈕時,列表視圖不會改變。 如果你給我更多關於如何使用Asynctask的信息,我會很高興。 – MSr
根據您的代碼,來自Web服務的數據最初會加載,並且當單擊該按鈕時您並未調用Web服務,因此看起來它不會被刷新。把'asynctask',在'doInBackground'中調用web服務,並在'onPostExecute'中設置適配器,然後在按鈕單擊時,再次調用你的asynctask。檢查這個asynctask http://stackoverflow.com/questions/9671546/asynctask-android-example – Oam