2014-10-09 127 views
1

我在这里有一个代码,允许我将项目添加到顶部。如果我有5件物品,它的工作方式就是这样。用复选框将项目添加到列表视图顶部

0 New Item 

1 

2 

3 

4 First item 

然后,如果有新东西被添加它就成了这个。

0 New Item 

1 

2 

3 

4 

5 First Item 

正如你所看到的,无论何时添加了一个新的项目,它成为位置0。这是一个问题,因为如果我设置复选框上的对位0,然后添加一个新的项目,新项目成为位置0,它检查新的项目并取消选中之前的项目。 我希望它能够像这样工作,同时仍然将项目添加到顶部。

4 New item 

3 

2 

1 

0 First Item 

添加新项目时。

5 New Item 

4 

3 

2 

1 

0 First Item 

这是我的ListView适配器。

public class TweetArrayAdapter extends ArrayAdapter<Object> implements OnClickListener { 


    TweetList tweetMessageObj; 
    ViewHolder holder = null; 


    public List<TweetList> tweetList = new ArrayList<TweetList>(); 

    public void add(TweetList object,int position) { 
     tweetList.add(position,object); 

    } 

    public TweetArrayAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    public int getCount() { 
     return this.tweetList.size(); 
    } 

    public TweetList getItem(int position) { 
     return tweetList.get(position); 
    } 

    @SuppressLint("ViewHolder") 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
      tweetMessageObj = getItem(position); 

      if(convertView == null){ 

      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.tweet_list_item, parent, false); 
      holder = new ViewHolder(); 
      holder.twitterUser = (TextView)row.findViewById(R.id.display_name); 
      holder.tweet = (TextView) row.findViewById(R.id.display_tweet); 
      holder.twitterMention = (TextView)row.findViewById(R.id.display_twitter_mentionname); 
      holder.profile_picture = (ImageView)row.findViewById(R.id.profile_picture); 
      holder.tweet_picture = (ImageView)row.findViewById(R.id.tweet_image); 
      holder.padding = (View)row.findViewById(R.id.view1); 
      holder.favorite = (CheckBox)row.findViewById(R.id.favorite_button); 
      //holder.retweet = (CheckBox)row.findViewById(R.id.retweet_button); 
      //holder.reply = (CheckBox)row.findViewById(R.id.reply_button); 

      holder.favorite.setTag(holder); 

      row.setTag(holder); 
      }else{ 
       holder = (ViewHolder)row.getTag(); 
      } 


      SpannableString hashtag = new SpannableString(tweetMessageObj.tweet); 
      Matcher matcher = Pattern.compile("@([A-Za-z0-9_-]+)").matcher(hashtag); 
      Matcher matcher2 = Pattern.compile("#([A-Za-z0-9_-]+)").matcher(hashtag); 
      while (matcher.find()) 
      { 
       hashtag.setSpan(new ForegroundColorSpan(Color.rgb(79, 120, 216)), matcher.start(), matcher.end(), 0); 
       hashtag.setSpan(new ClickableSpan() { 

        @Override 
        public void onClick(View widget) { 
         // TODO Auto-generated method stub 
         TextView tv = (TextView)widget; 
         String tags = tv.getText().subSequence(tv.getSelectionStart(),tv.getSelectionEnd()).toString(); 
         Toast.makeText(getActivity(), tags, Toast.LENGTH_LONG).show(); 
        } 
        public void updateDrawState(TextPaint ds) {// override updateDrawState 
          ds.setUnderlineText(false); // set to false to remove underline 
         } 
       },matcher.start(), matcher.end(), 0); 
      } 
      while (matcher2.find()) 
      { hashtag.setSpan(new ForegroundColorSpan(Color.rgb(79, 120, 216)), matcher2.start(), matcher2.end(), 0); 
       hashtag.setSpan(new ClickableSpan() { 

        @Override 
        public void onClick(View widget) { 
         // TODO Auto-generated method stub 
         TextView tv = (TextView)widget; 
         String tags = tv.getText().subSequence(tv.getSelectionStart(),tv.getSelectionEnd()).toString(); 
         Toast.makeText(getActivity(), tags, Toast.LENGTH_LONG).show(); 
        } 
        public void updateDrawState(TextPaint ds) {// override updateDrawState 
          ds.setUnderlineText(false); // set to false to remove underline 
         } 
       },matcher2.start(), matcher2.end(), 0); 
      } 
      holder.tweet.setText(hashtag, BufferType.SPANNABLE); 
      holder.tweet.setMovementMethod(LinkMovementMethod.getInstance()); 
      holder.tweet.setHighlightColor(Color.TRANSPARENT); 
      if(tweetMessageObj.tweet.isEmpty()){ 
       holder.tweet.setVisibility(View.GONE); 
      } 
      Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "fonts/light.ttf"); 
      holder.tweet.setTypeface(tf); 
      Typeface tf2 = Typeface.createFromAsset(getActivity().getAssets(), "fonts/bold.ttf"); 
      holder.twitterUser.setText(tweetMessageObj.twittername); 
      holder.twitterUser.setTypeface(tf2); 
      holder.twitterMention.setText("@" + tweetMessageObj.mentionname); 

      Picasso.with(getActivity()).load(tweetMessageObj.pictureURL).into(holder.profile_picture); 
      if(tweetMessageObj.tweetPictureUrl != null){ 
       holder.tweet_picture.setVisibility(View.VISIBLE); 
       holder.padding.setVisibility(View.VISIBLE); 
       Picasso.with(getActivity()).load(tweetMessageObj.tweetPictureUrl).into(holder.tweet_picture); 
      }else{ 
       holder.tweet_picture.setVisibility(View.GONE); 
       holder.padding.setVisibility(View.GONE); 
      } 

     return row; 
    } 

} 

public static class ViewHolder{ 
    TextView tweet,twitterUser,twitterMention; 
    ImageView profile_picture,tweet_picture; 
    CheckBox reply,retweet,favorite; 
    View padding; 
    boolean isFavorited = false; 
} 

TweetList

public class TweetList { 
    public String twittername,mentionname,tweet,pictureURL,tweetPictureUrl; 
    long status_id; 



    public TweetList(long status_id,String twittername,String mentionname,String tweet,String pictureURL) { 
     super(); 
     this.status_id = status_id; 
     this.twittername = twittername; 
     this.tweet = tweet; 
     this.pictureURL = pictureURL; 
     this.mentionname = mentionname; 


    } 
    public TweetList(long status_id,String twittername,String mentionname,String tweet,String pictureURL,String tweetPictureUrl) { 
     super(); 
     this.status_id = status_id; 
     this.twittername = twittername; 
     this.tweet = tweet; 
     this.pictureURL = pictureURL; 
     this.mentionname = mentionname; 
     this.tweetPictureUrl = tweetPictureUrl; 


    } 

} 
+0

后TweetList代码。 – 2014-10-09 12:58:47

+0

我编辑了帖子。 – Rhynoboy2009 2014-10-09 13:00:46

回答

1

试试这种方式,希望这会帮助你解决你的问题。

TweetList.java

public class TweetList { 
    public String twittername; 
    public String mentionname; 
    public String tweet; 
    public String pictureURL; 
    public String tweetPictureUrl; 
    public long status_id; 
    public boolean isFavourite; 
    public TweetList(long status_id,String twittername,String mentionname,String tweet,String pictureURL,boolean isFavourite) { 
     this.status_id = status_id; 
     this.twittername = twittername; 
     this.tweet = tweet; 
     this.pictureURL = pictureURL; 
     this.mentionname = mentionname; 
     this.isFavourite = isFavourite; 
    } 
    public TweetList(long status_id,String twittername,String mentionname,String tweet,String pictureURL,String tweetPictureUrl,boolean isFavourite) { 
     this.status_id = status_id; 
     this.twittername = twittername; 
     this.tweet = tweet; 
     this.pictureURL = pictureURL; 
     this.mentionname = mentionname; 
     this.tweetPictureUrl = tweetPictureUrl; 
     this.isFavourite = isFavourite; 
    } 
} 

TweetArrayAdapter.java

public class TweetArrayAdapter extends BaseAdapter { 

    private Context context; 
    public List<TweetList> tweetList; 

    public void add(TweetList object,int position) { 
     tweetList.add(position,object); 

    } 

    public TweetArrayAdapter(Context context) { 
     this.context=context; 
     tweetList = new ArrayList<TweetList>(); 
    } 

    public int getCount() { 
     return this.tweetList.size(); 
    } 

    public TweetList getItem(int position) { 
     return tweetList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if(convertView == null){ 
      convertView = LayoutInflater.from(context).inflate(R.layout.tweet_list_item, null); 
      holder = new ViewHolder(); 
      holder.twitterUser = (TextView)convertView.findViewById(R.id.display_name); 
      holder.tweet = (TextView) convertView.findViewById(R.id.display_tweet); 
      holder.twitterMention = (TextView)convertView.findViewById(R.id.display_twitter_mentionname); 
      holder.profile_picture = (ImageView)convertView.findViewById(R.id.profile_picture); 
      holder.tweet_picture = (ImageView)convertView.findViewById(R.id.tweet_image); 
      holder.padding = (View)convertView.findViewById(R.id.view1); 
      holder.favorite = (CheckBox)convertView.findViewById(R.id.favorite_button); 

      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder)convertView.getTag(); 
     } 


     SpannableString hashtag = new SpannableString(tweetList.get(position).tweet); 
     Matcher matcher = Pattern.compile("@([A-Za-z0-9_-]+)").matcher(hashtag); 
     Matcher matcher2 = Pattern.compile("#([A-Za-z0-9_-]+)").matcher(hashtag); 
     while (matcher.find()) 
     { 
      hashtag.setSpan(new ForegroundColorSpan(Color.rgb(79, 120, 216)), matcher.start(), matcher.end(), 0); 
      hashtag.setSpan(new ClickableSpan() { 

       @Override 
       public void onClick(View widget) { 
        TextView tv = (TextView)widget; 
        String tags = tv.getText().subSequence(tv.getSelectionStart(),tv.getSelectionEnd()).toString(); 
        Toast.makeText(context, tags, Toast.LENGTH_LONG).show(); 
       } 
       public void updateDrawState(TextPaint ds) {// override updateDrawState 
        ds.setUnderlineText(false); // set to false to remove underline 
       } 
      },matcher.start(), matcher.end(), 0); 
     } 
     while (matcher2.find()) 
     { hashtag.setSpan(new ForegroundColorSpan(Color.rgb(79, 120, 216)), matcher2.start(), matcher2.end(), 0); 
      hashtag.setSpan(new ClickableSpan() { 

       @Override 
       public void onClick(View widget) { 
        TextView tv = (TextView)widget; 
        String tags = tv.getText().subSequence(tv.getSelectionStart(),tv.getSelectionEnd()).toString(); 
        Toast.makeText(context, tags, Toast.LENGTH_LONG).show(); 
       } 
       public void updateDrawState(TextPaint ds) {// override updateDrawState 
        ds.setUnderlineText(false); // set to false to remove underline 
       } 
      },matcher2.start(), matcher2.end(), 0); 
     } 
     holder.tweet.setText(hashtag, TextView.BufferType.SPANNABLE); 
     holder.tweet.setMovementMethod(LinkMovementMethod.getInstance()); 
     holder.tweet.setHighlightColor(Color.TRANSPARENT); 
     if(tweetList.get(position).tweet.isEmpty()){ 
      holder.tweet.setVisibility(View.GONE); 
     } 
     Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/light.ttf"); 
     holder.tweet.setTypeface(tf); 
     Typeface tf2 = Typeface.createFromAsset(context.getAssets(), "fonts/bold.ttf"); 
     holder.twitterUser.setText(tweetList.get(position).twittername); 
     holder.twitterUser.setTypeface(tf2); 
     holder.twitterMention.setText("@" + tweetList.get(position).mentionname); 

     Picasso.with(context).load(tweetList.get(position).pictureURL).into(holder.profile_picture); 
     if(tweetList.get(position).tweetPictureUrl != null){ 
      holder.tweet_picture.setVisibility(View.VISIBLE); 
      holder.padding.setVisibility(View.VISIBLE); 
      Picasso.with(context).load(tweetList.get(position).tweetPictureUrl).into(holder.tweet_picture); 
     }else{ 
      holder.tweet_picture.setVisibility(View.GONE); 
      holder.padding.setVisibility(View.GONE); 
     } 
     holder.favorite.setChecked(tweetList.get(position).isFavourite); 

     return convertView; 
    } 
    static class ViewHolder{ 
     TextView tweet,twitterUser,twitterMention; 
     ImageView profile_picture,tweet_picture; 
     CheckBox favorite; 
     View padding; 
    } 

} 
+0

这是一种工作,每当一个新项目被添加它取消所有他们。这是用这个方法添加项目的正确方法吗? (intent.getLongExtra(“tweet_id”,1),intent.getStringExtra(“tweet_name”),intent.getStringExtra(“tweet_screenname”),intent.getStringExtra(“tweet”),intent.getStringExtra ( “tweet_profilepicture”),intent.getStringExtra( “tweetPicture”),假),0); – Rhynoboy2009 2014-10-09 13:26:04

+0

当我滚动列表时,也发生这种情况。 – Rhynoboy2009 2014-10-09 13:30:52

+0

默认isFavourite为false,所以当你选中复选框时也会更新值,特别是tweetList项目的位置。 – 2014-10-09 13:32:30

1

isFavorited是,应该是里面TweetList信息。 以这种方式在getView中,您可以更新CheckBox的值。

holder.favorite.setChecked(tweetMessageObj.isFavorited); 
相关问题