为什么 listView 中的名称不断变化?

Why the name in listView keep changing?

我在 Activity A 中有一个 listView,如下所示。所有的值和名称实际上都是 return 从 Activity C 到 B 然后只有 A.

单击第一个列表时,它应该在 editText B 上显示文本 Project 和值 3。但它显示的 Medical 实际上是从最后一个列表。

我把值从3改成43,return改成A后,名字就变了。我应该怎么做才能使名称保持不变?

Activity一个

      ArrayAdapter<String> adapter;
      ArrayList<String> m_listItems = new ArrayList<String>();
      int mClickedPosition;
      adapter=new ArrayAdapter<String (getActivity(),R.layout.claims,R.id.textView1,m_listItems);
     listV = (ListView) claims.findViewById(R.id.listView1);

               listV.setOnItemClickListener(new AdapterView.OnItemClickListener() {  // if list clicked
            public void onItemClick(AdapterView<?> listView, View view,
                                    int position, long id) {
                mClickedPosition = position;


                if (name.equals("Project")) {
                    String temp[] = m_listItems.get(position).split("\s\s+");
                    result = temp[temp.length - 1].trim();
                    result = result.replace("RM","");
                    Intent intent = new Intent(Claims1.this.getActivity(), Project1.class);
                    intent.putExtra("bitmap", true); // image
                    intent.putExtra("name", name);
                    intent.putExtra("result", result);
                    startActivityForResult(intent, 0);
                    Log.e("RESULT", "Result= " + result);
                }
                else if(name.equals("Medical"))
                {
                    String temp[] = m_listItems.get(position).split("\s\s+");
                    result = temp[temp.length - 1].trim();
                    result = result.replace("RM","");
                    Intent intent = new Intent(Claims1.this.getActivity(), Medical.class);
                    intent.putExtra("bitmap", true);
                    intent.putExtra("name", name);
                    intent.putExtra("result", result);
                    startActivityForResult(intent, 1);
                }
            }
        });
        return claims;
       }


   @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 0:  // for Project
                result = data.getStringExtra("text"); //get from B
                name = data.getStringExtra("a");
                description = data.getStringExtra("c");
                as = Long.parseLong(result);
                Log.d("FIRST", "result:" + result);
                Text = "  " + name + "                                  " + "RM" + result + "";
                if (mClickedPosition == -1) { // if is icon button clicked
                    m_listItems.add(Text);

                } else {
                    m_listItems.set(mClickedPosition, Text);

                }
                adapter.notifyDataSetChanged();
                listV.setAdapter(adapter);
                break;

            case 1:  // for Medical
                result = data.getStringExtra("text");
                name = data.getStringExtra("a");
                description = data.getStringExtra("c");
                as = Long.parseLong(result);
                Log.d("FIRST", "result:" + result);
                Text = "  " + name + "                                  " + "RM" + result + "";
                // m_listItems.clear();
                if (mClickedPosition==-1)
                {
                    m_listItems.add(Text);

                }
                else
                {
                    m_listItems.set(mClickedPosition, Text);

                }
                adapter.notifyDataSetChanged();
                listV.setAdapter(adapter);
                break;

Activity B(项目 1)

   if(getIntent().getExtras()!=null) { //if  has value pass from A
            final String Amount = getIntent().getExtras().getString("result");
            final String description1 = getIntent().getExtras().getString("description");
            txt1.setText(description1);
            txt.setText(Amount);
        }

                b.setOnClickListener(new View.OnClickListener() {  // return to A
                    public void onClick(View arg0) {
                        Intent returnIntent = new Intent();
                        a = "Project";
                        text = txt.getText().toString(); // amount
                        returnIntent.putExtra("text", text);
                        returnIntent.putExtra("a", a);
                        returnIntent.putExtra("c", c); // receive from Activity C
                        setResult(Activity.RESULT_OK, returnIntent);
                       finish();
                    }
                });
                       viewImage.setImageBitmap(Global.img); // receive from C
                  }

注意到 Activity A 中的 result 代表值 3,5 而 name 代表 projectMedical。我怎样才能解决这个问题 ?请帮助。

据我了解,Activity A 中的变量 name 包含先前结果值(来自 Activity B),而不是来自您在列表视图中单击的行,即 "Medical" 您之前从 Activity B 获得的值,该值由变量 name 持有,并且在您的列表视图点击事件中,您检查了 name 是 "Medical" 还是 "Project" (在这种情况下,它是 "Medical",因此医疗 activity 已启动)。

一种解决方案是从列表视图中获取值("Project/Medical")。

试试这个代码。 Activity一个

  mClickedPosition = position;
  String temp[] = m_listItems.get(position).split("\s\s+");
  result = temp[temp.length - 1].trim();
  result = result.replace("RM","");
  name = temp[1].trim();
  if (name.equals("Project")) {


                Intent intent = new Intent(Claims1.this.getActivity(), Project1.class);
                intent.putExtra("bitmap", true);
                intent.putExtra("name", name);
                intent.putExtra("result", result);
                startActivityForResult(intent, 0);
                Log.e("RESULT", "Result= " + result);
            }
            else if(name.equals("Medical"))
            {
                Intent intent = new Intent(Claims1.this.getActivity(), Medical.class);
                intent.putExtra("bitmap", true);
                intent.putExtra("name", name);
                intent.putExtra("result", result);
                startActivityForResult(intent, 1);
            }