Android 通过第二个活动从数据库传递listview的项目位置

Android 通过第二个活动从数据库传递listview的项目位置,android,eclipse,listview,Android,Eclipse,Listview,嗨,我创建了一个日记,人们可以保存他们的笔记。我有3个活动,比如说A、B和C活动。现在,我将编辑的注释保存在列表视图中的活动A中,当单击项目位置时,它将转到活动B,显示我在编辑框中输入的文本视图表单。现在在活动B中,向我显示文本视图注释以及编辑按钮,我可以在其中编辑或更新活动C中的相同数据。因此,当我单击活动B中的编辑/更新按钮时,它传递活动A中保存的列表的项目位置。简言之,我想通过活动B将项目位置从A传递到C。我可以成功地从A传递到B,但不能从B传递到C。请提供代码,这样我会很容易。下面是一些

嗨,我创建了一个日记,人们可以保存他们的笔记。我有3个活动,比如说A、B和C活动。现在,我将编辑的注释保存在列表视图中的活动A中,当单击项目位置时,它将转到活动B,显示我在编辑框中输入的文本视图表单。现在在活动B中,向我显示文本视图注释以及编辑按钮,我可以在其中编辑或更新活动C中的相同数据。因此,当我单击活动B中的编辑/更新按钮时,它传递活动A中保存的列表的项目位置。简言之,我想通过活动B将项目位置从A传递到C。我可以成功地从A传递到B,但不能从B传递到C。请提供代码,这样我会很容易。下面是一些代码

活动A

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        requestWindowFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.listusers);
        lista = (ListView) findViewById(R.id.lstusers);
        empty_data= (LinearLayout) findViewById(R.id.empty_data);
        data = new AccessModel(this);       
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();       
         query = data.listUser();

         if(query.size()>0)
           empty_data.setVisibility(View.GONE);
         else
           empty_data.setVisibility(View.VISIBLE);

         users = new ListAdapter(this, query);
         lista.setAdapter(users);
         lista.setOnItemClickListener(this);

    }


    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        // TODO Auto-generated method stub  
        User u = (User) query.get(position);
        Intent i = new Intent(ActivityA.this, ActivityB.class);
        i.putExtra(getString(R.string.valuesId), String.valueOf(u.getId()));
        i.putExtra("position", position);
        startActivity(i);       
    }



    }
这是活动C

    data = new AccessModel(this);

        name = (EditText) findViewById(R.id.mn_name);
        age = (EditText) findViewById(R.id.mn_age);
        gender = (EditText) findViewById(R.id.mn_gender);
        height = (EditText) findViewById(R.id.mn_height);
        weight = (EditText) findViewById(R.id.mn_weight);
        dateofbirth = (EditText) findViewById(R.id.mn_dob);

        btnupdate = (Button) findViewById(R.id.btupdate);
        btndelete = (Button) findViewById(R.id.btdelete);               

        btnupdate.setOnClickListener(this);
        btndelete.setOnClickListener(this);

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Bundle extras = getIntent().getExtras();
        if(extras==null){
            back();
            return;
        }

        userId = extras.getString(getString(R.string.valuesId));        
        loadData(userId);

    }

    private void loadData(String id){

            User u = (User) data.getUser(id);
            Toast.makeText(this, u.getName(), Toast.LENGTH_LONG).show();            
            name.setText(u.getName().toString());           
            age.setText(u.getAge());
            gender.setText(u.getGender());
            height.setText(u.getHeight());
            weight.setText(u.getWeight());
            dateofbirth.setText(u.getDateofbirth());        
    }


    private void updateUser(String id){
        String[] ids = {id};
        try{
            data.updateUser(ids,name.getText().toString(), age.getText().toString(), gender.getText().toString(), height.getText().toString(), weight.getText().toString(), dateofbirth.getText().toString());  

            Toast.makeText(this, getString(R.string.good), Toast.LENGTH_LONG).show();           
        }catch(Exception e){
            Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show();
        }   
    }

    private void deleteUser(String id){
        String[] ids = {id};
        try{
            data.deleteUser(ids);                       
            Toast.makeText(this, getString(R.string.good), Toast.LENGTH_LONG).show();
            back();
        }catch(Exception e){
            Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show();
        }   
    }



    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){
        case R.id.btupdate:
            updateUser(userId);
            break;
        case R.id.btdelete:
            deleteUser(userId);
            break;
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
            case android.R.id.home:
                back();
                return true;                
            default:
                return super.onOptionsItemSelected(item);
        }

    }

    private void back(){
        Intent i = new Intent(this, ActivityA.class);
        startActivity(i);
    }

}
您正在将“位置”从
B
传递到
C
,但读取
userId=extras.getString(getString(R.string.valuesId))
C

我想
B
应该将
userId
传递给
C
而不是
position

更新: 活动B:

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){
        case R.id.btedit:
            Bundle extras = getIntent().getExtras();
            int position = extras.getInt("position");
            Intent i = new Intent(ActivityB.this, ActivityC.class);

            // You pass "position" here
            i.putExtra("position", position);   
            startActivity(i);
            break;
        }
    }
因此,您将“位置”传递给活动C,但在活动C中,您阅读:

@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Bundle extras = getIntent().getExtras();
        if(extras==null){
            back();
            return;
        }

        // Here you don't read "position" but R.string.valuesId ?!?!?!?
        userId = extras.getString(getString(R.string.valuesId));        
        loadData(userId);

    }
这很简单

在活动B中,右传递字符串,如

i.putExtra("message", userId);
在活动C中,得到这个

userId  = extras.getString("message");

没有给我答案的可能副本。。请给我正确的答案。在“编辑”按钮下的活动b中,我做错了什么?单击“编辑”后,应用程序崩溃。你在C中的位置在哪里?好的,我编辑了活动C。现在看看活动cso如何做到这一点?给我一个简单的代码,从a到c再到b,或者从b到c。等等,再看一遍你的代码!在
B
中,您执行
i.putExtra(“位置”,位置)extras.getString(getString(R.string.valuesId))…这就是我从a传递到b的方式。来吧,看看
活动b的
onClick()
。您要将哪些数据放入intent extra?-->“position”下一步看一下Activity C的
onResume()
,您在其中阅读了intent extra-->“R.string.valuesId”…让我们一起来。非常感谢您…我的问题终于解决了…再次感谢。
userId  = extras.getString("message");