没有启动活动的android putextra

时间:2012-08-19 21:46:43

标签: android database listview android-intent

我需要帮助。 我有两个活动和一个数据库。我想要做的就是当我按下活动A中的按钮时,我将我的editText中的字符串发送到活动B.在活动B中,我尝试在我的数据库中插入该字符串并将其显示在列表视图中。如果我在活动A中开始活动B但是我不会显示活动B,则一切正常。

这是我的代码:

活动A:

public class Example extends Activity {


public final static String ID_EXTRA2="com.example.activities";
public EditText MyInputText = null;
ImageView MyButton;
TextView MyOutputText, MyInputtext;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.diccionary);

MyInputText = (EditText)findViewById(R.id.InputText);
MyOutputText = (TextView)findViewById(R.id.OutputText);
    MyButton = (ImageView)findViewById(R.id.botonaceptar);
    MyButton.setOnClickListener(MyButtonOnClickListener);

 public ImageView.OnClickListener MyTranslateButtonOnClickListener = new ImageView.OnClickListener(){
 public void onClick(View v) {

    String InputString; 

    InputString = MyInputText.getText().toString();

    try{

    Intent d = new Intent(Example.this, Secondactivity.class);
           d.putExtra(ID_EXTRA2, InputString);

           //startActivity(d); <----- If i start the secondactivity, that works...


    }catch (Exception e){

        }

}
};

public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);
    MenuInflater awesome = getMenuInflater();
    awesome.inflate(R.menu.main_menu, menu);
    return true;

}
public boolean onOptionsItemSelected(MenuItem item){
    switch(item.getItemId()){
    case R.id.menu1:

        startActivity(new Intent("com.example.activities.SECONDACTIVITY"));
        return true;
        case R.id.menu2:

        //something to do
        return true;

}

    return false;
}

};

活动B:

public class Secondactivity extends Activity  {

NoteAdapter2 adapter = null;
NoteHelper2 helper2 = null;
Cursor dataset_cursor2 = null;

String entriId = null;
public ListView list2;
String passedword = null;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);


    try{

    list2 = (ListView)findViewById(R.id.list2);

    helper2 = new NoteHelper2(this);

    ---->passedword = getIntent().getStringExtra(Example.ID_EXTRA2);

    ---->helper2.insert(passedword); //here i insert the string in my db

        startManagingCursor(dataset_cursor2);

        dataset_cursor2 = helper2.getAll();

    adapter = new NoteAdapter2(dataset_cursor2);

    list2.setAdapter(adapter);

    dataset_cursor2.requery();

    adapter.notifyDataSetChanged();

    //this is how we know to do when a list item is clicked

    list2.setOnItemClickListener(onListClick);

    }

    catch (Exception e){

    // this is the line of code that sends a real error message to the log

    Log.e("ERROR", "ERROR IN CODE" + e.toString());

    //this is the line that prints out the location in the code where the error ocurred
    e.printStackTrace();
    }

}

@Override
protected void onDestroy() {

    super.onDestroy();
    helper2.close();
}

private AdapterView.OnItemClickListener onListClick = new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){


        entriId = String.valueOf(id);

    }
};


class NoteAdapter2 extends CursorAdapter {
    NoteAdapter2(Cursor c){
        super(Zhistorytranslate.this, c);


    }

    public void bindView(View row2, Context ctxt, Cursor c) {
        NoteHolder2 holder2 = (NoteHolder2)row2.getTag();
        holder2.populateFrom2(c, helper2);
    }

    public View newView(Context ctxt, Cursor c, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View row2 = inflater.inflate(R.layout.row2, parent, false);
        NoteHolder2 holder2 = new NoteHolder2(row2);

        row2.setTag(holder2);
        return (row2);
    }
    }
static class NoteHolder2 {
    private TextView entriText = null;

    NoteHolder2(View row2){
        entriText = (TextView)row2.findViewById(R.id.entri);


    }

    void populateFrom2(Cursor c, NoteHelper2 helper2) {
        entriText.setText(helper2.getEntri(c));
    }
}

2 个答案:

答案 0 :(得分:9)

如果我理解正确,您希望在不启动B 的情况下将数据从A发送到B 。在这种情况下,您需要忘记Intent并考虑在您的应用中使用store data的方法。我的建议是使用SharedPreferences

以下是如何使用它:

  • 在您的活动A中,存储字符串:

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("string_id", InputString); //InputString: from the EditText
    editor.commit();
    
  • 在您的活动B中,您可以通过以下方式获取值:

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    String data = prefs.getString("string_id", "no id"); //no id: default value
    

答案 1 :(得分:0)

您的问题很难理解,但您似乎希望能够在不启动其他活动的情况下将EditText的内容添加到数据库中。只需在Image的OnClickListener中执行此操作:

public void onClick(View v) {
    NoteHelper2 helper2 = new NoteHelper2(this);
    helper2.insert(MyInputText.getText().toString());
}

您还应该阅读Java naming convention