2012-05-10 2 views
0

Chris Banes에서 새로 고침 목록을 가져 오기 위해 Twitter4j를 통해 홈 라인 페이지 매김을 구현하려고합니다. 그러나, 나는 그것을 깨닫는 방법의 문제가있다. 나는 그것이 어떻게 작동해야하는지 약간의 노트를 가지고있다. 그러나 그렇지 않다. 나의 pull refresh list does not` refresh. 다음 40 트윗을 새로 고침하는 방법을 알려주십시오.Twitter4j 페이지 넘김 - 새로 고침 목록 사용 (Chris Banes)

활동

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tweetlist); 

     initializeVars(); 
     paging = new Paging(1, 40); 

     try { 
      ListView actualListView = pullToRefreshView.getRefreshableView(); 

      tweets = twitter.getHomeTimeline(paging); 
      tweetAdapter = new TweetListAdapter(this, R.layout.customtweetlist, tweets); 
      actualListView.setAdapter(tweetAdapter); 
     } catch (TwitterException e) { 
      e.printStackTrace(); 
     } 
    } 

public void onRefresh() { 
     new GetDataTask().execute(); 
    } 

    private class GetDataTask extends AsyncTask<Void, Void, List<Status>> { 

     protected List<twitter4j.Status> doInBackground(Void... params) { 
      paging.setPage(2); 
      try { 
       tweets = twitter.getHomeTimeline(paging); 
      } catch (TwitterException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return tweets; 
     } 

     protected void onPostExecute(List<twitter4j.Status> result) { 
      tweetAdapter.notifyDataSetChanged(); 

      // Call onRefreshComplete when the list has been refreshed. 
      pullToRefreshView.onRefreshComplete(); 

      super.onPostExecute(result); 
     } 
    } 

내 TweetAdapter

public class TweetListAdapter extends ArrayAdapter<Status> { 
    private final Context context; 
    private final List<Status> values; 

    public TweetListAdapter(Context context,int textViewResourceId, List<Status> tweets) { 
     super(context, textViewResourceId, tweets); 
     this.context = context; 
     this.values = tweets; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.customtweetlist, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.tvText); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.ivImage); 
     Status tweet = values.get(position); 
     textView.setText(tweet.getText()); 

    // imageView.setImageBitmap(getBitmap(tweet.getProfileImageUrl())); 
     rowView.invalidate(); 

     return rowView; 
    } 

    public static Bitmap getBitmap(String bitmapUrl) { 
     try { 
      URL url = new URL(bitmapUrl); 
      return BitmapFactory.decodeStream(url.openConnection() .getInputStream()); 
     } 
     catch(Exception ex) {return null;} 
    } 
} 

답변

1

그래서 일어나는 것은 그러나 그 목록이이 아니라, 어댑터의 this.values 값을 업데이트 할 tweets 변수를 업데이트하고 있음을 무엇 어댑터는 목록을 렌더링하는 데 사용하고 있습니다 (이유를 알고 싶다면 ArrayAdapter 코드를 자세히 살펴보십시오). 문제를 수정하고 혼란을 방지하는 가장 쉬운 방법은 BaseAdapter에서 확장하는 것입니다. 그것은 당신을 위해 조금 더 많은 일을하지만 어댑터가하는 것을 완벽하게 제어 할 것입니다 (그리고 더 잘 진행되는 것을 이해할 것입니다).

코드를 더 정리하려면 어댑터에 this.values 값을 업데이트하는 메트로드를 추가해야합니다. tweets과 같은 목록을 참조하면 안됩니다.