【问题标题】:How to setText to ArrayList<>?如何将文本设置为 ArrayList<>?
【发布时间】:2016-04-04 10:00:40
【问题描述】:

我有一个带有 get Mentions 方法的类 Tweet 但我不知道如何将 setText 设置为 ArrayList。 这是我的代码

public class Tweet {

    public String body;
    private long uid;
    private String createAt;
    private User user;
    private String urlImageNews;
    private static String url;
    public ArrayList<User> mentions;
    public ArrayList<User> getMentions()
    {
        return mentions;
    }
    public String getUrlImageNews()
    {
        return urlImageNews;
    }
    public String getBody() {
        return body;
    }

    public long getUid() {
        return uid;
    }

    public String getCreateAt() {
        return createAt;
    }

    public User getUser() {
        return user;
    }
    public String getUrl()
    {
        return url;
    }

    public String getRelativeTimeAgo() {
        String twitterFormat = "EEE MMM dd HH:mm:ss ZZZZZ yyyy";
        SimpleDateFormat sf = new SimpleDateFormat(twitterFormat, Locale.ENGLISH);
        sf.setLenient(true);

        String relativeDate = "";
        try {
            long dateMillis = sf.parse(getCreateAt()).getTime();
            relativeDate = DateUtils.getRelativeTimeSpanString(dateMillis,
                    System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS).toString();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return relativeDate;
    }
    public static Tweet fromJSON(JSONObject jsonObject)
    {
        Tweet twt = new Tweet();
        try {
            twt.body = jsonObject.getString("text");
            twt.uid = jsonObject.getLong("id");
            twt.createAt = jsonObject.getString("created_at");
            twt.user = User.fromJSON(jsonObject.getJSONObject("user"));
            twt.mentions = LoadMentions(jsonObject);
            JSONArray media = jsonObject.getJSONObject("entities").optJSONArray("media");
            if (media != null) {
                for (int i = 0; i < media.length(); i++) {
                    JSONObject a = media.getJSONObject(i);
                    if (a.getString("type").equals("photo")) {
                        twt.urlImageNews = a.getString("media_url_https");

                    }

                }
            }


        } catch (JSONException e) {
            e.printStackTrace();
        }

        return twt;
    }
    private static ArrayList<User> LoadMentions(JSONObject object) throws JSONException{
        if (!object.getJSONObject("entities").has("user_mentions")) {
            return  null;
        }

        ArrayList<User> mentions = new ArrayList<User>();
        JSONArray mentionsJSON = object.getJSONObject("entities").getJSONArray("user_mentions");
        for (int i = 0; i < mentionsJSON.length(); i++) {
            User user = User.fromJSON(mentionsJSON.getJSONObject(i));
            mentions.add(user);
        }
        return mentions;

    }
    public static ArrayList<Tweet> fromJSONArray(JSONArray jsonArray)
    {
        ArrayList<Tweet> tweets = new ArrayList<>();
        for ( int i = 0 ; i < jsonArray.length(); i++)
        {
            try {
                JSONObject tweetjson = jsonArray.getJSONObject(i);
                Tweet tweet = Tweet.fromJSON(tweetjson);
                if(tweet != null)
                {

                    tweets.add(tweet);
                }

            } catch (JSONException e) {
                e.printStackTrace();
                continue;
            }
        }
        return tweets;
        }
}

这是我的 MentionsAdapter,我想在其中设置 Mentions 数组的文本

public class MentionsAdapter extends RecyclerView.Adapter<MentionsAdapter.ViewHolder> {
    Context context;
    View tweetView;

    private List<Tweet> lTweets;

    public MentionsAdapter(List<Tweet> tweets)
    {
        lTweets = tweets;
    }


    public void clear() {
        lTweets.clear();
        notifyDataSetChanged();
    }

    // Add a list of items
    public void addAll(List<Tweet> list) {
        lTweets.addAll(list);
        notifyDataSetChanged();
    }
    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private ImageView ivProfile;
        private TextView tvUsername;
        private TextView tvMentions;
        private TextView tvMentionsDate;
        public ViewHolder(View view) {
            super(view);
            ivProfile = (ImageView) view.findViewById(R.id.ivAva);
            tvUsername = (TextView) view.findViewById(R.id.tvName);
            tvMentions = (TextView) view.findViewById(R.id.tvMentions);
            tvMentionsDate = (TextView) view.findViewById(R.id.tvMentionsDate);
            view.setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
        }
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);
        tweetView = inflater.inflate(R.layout.item_metions, parent, false);
        ViewHolder viewHolder = new ViewHolder(tweetView);
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Log.d("debug", "int:: " + position);
        Tweet tweet = lTweets.get(position);
        holder.tvMentionsDate.setText(tweet.getRelativeTimeAgo());
        holder.tvUsername.setText(tweet.getUser().getName());
        holder.tvMentions.setText(tweet)
        holder.ivProfile.setImageResource(android.R.color.transparent);
        Glide.with(context).load(tweet.getUser().getProfileImageUrl()).into(holder.ivProfile);
    }

    @Override
    public int getItemCount() {
        if(lTweets == null){
            Log.d("debug", "null");
            return 0;
        }
        else {
            Log.d("debug", ":: " + lTweets.size());
            return lTweets.size();
        }
    }
}

提前致谢。

【问题讨论】:

  • 你到底想用 tvMentions 做什么??
  • 其实我正在尝试 setText 提及但我不能。就像我想从 twt.mentions = LoadMentions(jsonObject); 打印出数据一样但我不知道该怎么做

标签: java android json arraylist


【解决方案1】:

您可以通过关注从推文中获取提及数据

        User user = tweet.getMentions();

这样您就可以从中获取用户对象。同样的方式,您可以使用从此处获取所有用户实例

        user.getMethodName()

只需在 onBindViewHolder() 中更新上述代码即可。

@Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            Log.d("debug", "int:: " + position);
            Tweet tweet = lTweets.get(position);
            User user = tweet.getMentions();

            holder.tvMentionsDate.setText(tweet.getRelativeTimeAgo());
            holder.tvUsername.setText(tweet.getUser().getName());
            holder.tvMentions.setText(tweet)
            holder.ivProfile.setImageResource(android.R.color.transparent);
            Glide.with(context).load(tweet.getUser().getProfileImageUrl()).into(holder.ivProfile);
        }

【讨论】:

  • 是的,我用你的用户更新了我的方法 user = tweet.getMentions();但我无法将其添加到 . holder.tvMentions.setText(user).
  • 你可以调用holder.tvMentions.setText(user.getMethodName())。这里methodName()应该是用户类定义的..
  • 感谢您的快速回复,Malli 好像我解决了它:D
【解决方案2】:

如果我没记错的话,你想将数据添加到 Tweet 类型的 ArrayList 中,可以这样完成

yourArrayList.add(new Tweet ("Parameters goes here");

希望对你有帮助

【讨论】:

    【解决方案3】:

    如果我理解正确,您只想显示提及次数。 你可以这样做:

    holder.tvMentions.setText(Integer.toString(tweet.getMentions().size()));
    

    【讨论】:

    • 是的,但我想打印出人们提到我的字符串。像这样@dq1078:Blablabla
    • 那么您必须遍历 ArrayList 元素,例如 String label = ""; for(int i=0; i
    【解决方案4】:

    嗯嗯,我通过添加一些行来修正我的答案: twt.textMentions = jsonObject.getString("text"); 总之谢谢大家的回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2014-05-05
      • 2016-05-15
      • 1970-01-01
      相关资源
      最近更新 更多