【问题标题】:Android - displaying wrong data in toast when i click on list view itemAndroid - 当我单击列表视图项时,在 toast 中显示错误的数据
【发布时间】:2015-10-02 21:16:53
【问题描述】:

当我点击某个特定的 id 时,它会显示一些其他的 id 数据,检查下面的代码以了解我的问题

这段代码有什么问题,我发现好像没有保存任何位置,如果只是问题,请给出一些提示

public FeedListAdapter(Activity activity, List<FeedItem> movieItems) {
    this.activity = activity;
    this.feedItems = movieItems;
    // this.intentContext = activity;
}


@Override
public int getCount() {
    return feedItems.size();
}

@Override
public Object getItem(int location) {
    return feedItems.get(location);
}

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


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_news_feed, null);

    if (imageLoader == null)
        imageLoader = VolleyApplication.getInstance().getImageLoader();
    final NetworkImageView profiePic = (NetworkImageView) convertView.findViewById(R.id.imgProfilePic);
    final NetworkImageView postImage = (NetworkImageView) convertView.findViewById(R.id.imgPostImage);
    personName = (TextView) convertView.findViewById(R.id.txPersonName);
    personEmail = (TextView) convertView.findViewById(R.id.txEmail);
    message = (TextView) convertView.findViewById(R.id.txMessage);
    createdAt = (TextView) convertView.findViewById(R.id.txCreatedAt);
    final TextView webLink = (TextView) convertView.findViewById(R.id.txWebLink);
    webLink.setPaintFlags(webLink.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    webLink.setTextColor(Color.parseColor("#0073bd"));

    postImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String getURL = postImage.getImageURL().toString();
            String name = personName.getText().toString();
            Intent intent = new Intent(v.getContext(), ImageViewActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("imageurl", getURL);
            intent.putExtra("name", name);
            v.getContext().startActivity(intent);
        }
    });

    personName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name = personName.getText().toString();
            Toast.makeText(personName.getContext(),name,Toast.LENGTH_SHORT).show();
        }
    });

    postImage.setOnTouchListener(new View.OnTouchListener() {
        private Rect rect;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                postImage.setColorFilter(Color.argb(50, 0, 0, 0));
                rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
            }
            if (event.getAction() == MotionEvent.ACTION_UP) {
                postImage.setColorFilter(Color.argb(0, 0, 0, 0));
            }
            if (event.getAction() == MotionEvent.ACTION_MOVE) {
                postImage.setColorFilter(Color.argb(0, 0, 0, 0));

            }
            return false;
        }
    });


    // getting movie data for the row
    m = feedItems.get(position);

    personName.setText(m.getPersonName());
    personEmail.setText(m.getEmail());
    message.setText(m.getMessage());
    createdAt.setText(m.getCreatedAt());

    imgDelete = (ImageView) convertView.findViewById(R.id.imgDelete);
    SharedPreferences preferencesUserDetails = convertView.getContext().getSharedPreferences("UserDetails", convertView.getContext().MODE_PRIVATE);
    final String userName = preferencesUserDetails.getString("name", null);
    final String emailId = preferencesUserDetails.getString("email", null);
    String getPersonName = personName.getText().toString();
    String getPersonEmail = personEmail.getText().toString();

    if (getPersonName.equals(userName) && getPersonEmail.equals(emailId)) {
        imgDelete.setVisibility(View.VISIBLE);
    } else {
        imgDelete.setVisibility(View.GONE);
    }


    txId = (TextView) convertView.findViewById(R.id.txId);
    txId.setText(m.getIdOf());

    liLike = (LinearLayout) convertView.findViewById(R.id.liLike);
    imgLike = (ImageView) convertView.findViewById(R.id.imgLike);
    txLike = (TextView) convertView.findViewById(R.id.txLike);
    txLike.setText(m.getLiked());

    liLike.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                insertLike();
                //Toast.makeText(liLike.getContext(),"dssd",Toast.LENGTH_SHORT).show();
        }
    });

    // thumbnail image
    profiePic.setImageUrl(m.getThumbnailUrl(), imageLoader);


    return convertView;
}


private void insertLike() {

    final String geTtxId = txId.getText().toString();

    //  showProgress(true);
    final StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {

            imgLike.setImageResource(R.drawable.icn_thumb_up_active);
            Intent i = new Intent(liLike.getContext(),MainActivity.class);
            liLike.getContext().startActivity(i);
            Toast toast = Toast.makeText(liLike.getContext(), "Data Inserted Successfully"+geTtxId, Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
            //showProgress(false);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            //  showProgress(false);
            imgLike.setImageResource(R.drawable.icn_thumb_up);
            Toast toast = Toast.makeText(liLike.getContext(), "please check your internet connection", Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {

            SharedPreferences preferencesUserDetails = liLike.getContext().getSharedPreferences("UserDetails", liLike.getContext().MODE_PRIVATE);
            final String userName = preferencesUserDetails.getString("name", null);
            final String emailId = preferencesUserDetails.getString("email", null);

            Log.w("postid", userName);
            Map<String, String> params = new HashMap<String, String>();
            params.put("person_name", userName);
            params.put("postid", geTtxId);
            params.put("email_id", emailId);
            return params;
        }
    };

    // Adding request to request queue
    VolleyApplication.getInstance().addToRequestQueue(postRequest);

}

【问题讨论】:

  • 了解一些数据是什么样子、您期望什么以及您将得到什么会很有帮助。发布整个文件没有帮助。
  • 酷,当我点击特定项目时,我得到了列表视图项目的不同位置!!

标签: android json listview android-volley


【解决方案1】:

我认为你的问题是因为你正在设置

personName.setOnClickListener

在同一个对象上多次。 当您回收视图时,使用:

  if (convertView == null)
    convertView = inflater.inflate(R.layout.list_news_feed, null);

所以假设你已经用 setOnClickListener 连接了这个视图,在回收之后你再次连接它。

一个简单的解决方案是通过以下方法使用索引:

 personName.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        m = feedItems.get(position);
        //now get what you need from m
        Toast.makeText(personName.getContext(),m.getPersonName(),Toast.LENGTH_SHORT).show();
    }
});

您可能还想添加一个检查以了解对象已经有一个 ClickListener 的天气,而不是多次设置它

一个可能的解决方案是这样的:

 if (convertView == null) {
   //Init your views etc...
     personName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
      });
  }
  else
  {
      //just update the data, but don't set the click listeners
  }

【讨论】:

  • 另一个疑问!!当我单击 imageview 时,它调用 onclick 方法来更改 imageview 中的图像,现在问题与上面相同.. 所以现在我想获取 imageview 位置 onclick 动作?你能提供任何提示吗??
  • imgLike.setImageResource(R.drawable.icn_thumb_up);在上面的代码中找到这一行你可以理解我的问题!
  • 我认为只有在 convertView 为空时才应该 setOnClickListener,这样你就不会得到多个监听器。并在您的听众中使用位置。
  • 希望你没有明白我的意思,我想获取图像 imageview 的位置,我必须在 onClick 之后将另一个图像设置为相同的图像视图
猜你喜欢
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多