HeWhoProtects
HeWhoProtects

Reputation: 487

adding a list view Item from another activity

I am a beginner in android development, I am trying to add an list item value from a different activity, i wrote a code where I am able to add an list item from within the activity, but not from outside the activity

TestDatabaseActivity.java

package com.laith.sql;

import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;

public class TestDatabaseActivity extends ListActivity {
private CommentsDataSource datasource;
public ArrayAdapter<Comment> adapter;
private EditText insert_et;
public Comment comment;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sqlite);

    insert_et =(EditText)findViewById(R.id.editText1);
    datasource = new CommentsDataSource(this);
    datasource.open();

    List<Comment> values = datasource.getAllComments();

    // Use the SimpleCursorAdapter to show the
    // elements in a ListView
    adapter = new ArrayAdapter<Comment>(this,
            android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
}

// Will be called via the onClick attribute
// of the buttons in main.xml
public void onClick(View view) {
    ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter();
    comment = null;
    switch (view.getId()) {
    case R.id.add:
                    MySingleton mys = MySingleton.getInstance();

        String test = mys.getInstance().getMyStrings();
        addComment(test);
        break;
    case R.id.delete:
        if (getListAdapter().getCount() > 0) {
            comment = (Comment) getListAdapter().getItem(0);
            datasource.deleteComment(comment);
            adapter.remove(comment);
        }
        break;
    }
    adapter.notifyDataSetChanged();
}

@Override
protected void onResume() {
    datasource.open();
    super.onResume();
}

@Override
protected void onPause() {
    datasource.close();
    super.onPause();
}

/// method used to add a comment from a different directory 
public void addComment(String LastComment)
{
    // code here to be called by another activity

                ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>)getListAdapter();
        comment = datasource.createComment(LastComment);
        adapter.add(comment);
        adapter.notifyDataSetChanged();
           // am getting a null value for comment when I call the function from another activity


}

}

Test button in another activity

public Button.OnClickListener Test_button = new Button.OnClickListener() 
 {
     public void onClick(View v)
     {
         String verify_string="test";
         MySingleton mys = MySingleton.getInstance();
         mys.setMyStrings(verify_string);

         TestDatabaseActivity tdba = new TestDatabaseActivity();
         tdba.addComment(mys.getMyStrings());
     }
 };

Please help ! :)

Thank you

<--------------------------- working solution ---------------------------------------------> new class created

  public class ConnectToDB 
{
private CommentsDataSource datasource;

public void addCommentToDB(Context context, String new_comment)
{
    datasource = new CommentsDataSource(context);
    datasource.open();
    datasource.createComment(new_comment);  
}

}

onResume edited

protected void onResume() {
    datasource.open();
    values = datasource.getAllComments();
    adapter = new ArrayAdapter<Comment>(this,
            android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
    adapter.notifyDataSetChanged();

    super.onResume();
}

Upvotes: 0

Views: 4458

Answers (2)

pleerock
pleerock

Reputation: 18846

Use android bundles, put extra values from your activity to another.

Or just create one singleton and use it instance from both of your activities. Create one field, for example listViewStrings, storage in there your strings, and get them from another activity (by accessing to single (singleton's) instance)

create a new class:

public class MySingleton {
// ----------------------------------------------------------------------
// Properties
// ----------------------------------------------------------------------

private String[] myStrings;

// ----------------------------------------------------------------------
// Public methods
// ----------------------------------------------------------------------

public void setMyStrings(String[] myStrings) {
          this.myStrings = myStrings;
}

public String[] getMyStrings() {
          return myStrings;
}

// ----------------------------------------------------------------------
// Singleton object
// ----------------------------------------------------------------------

private static MySingleton instance = new MySingleton();

/**
 * Close public access to the constructor
 */
private MySingleton() {
}

/**
 * Gets object's singleton instance
 * 
 * @return singleton instance
 */
public static MySingleton getInstance() {
    return instance;
}

}

And use in the first activity:

MySingleton mys = MySingleton.getInstance();
mys.setMyStrings(new String[] {"element1", "element2", "element3"});

And in the second:

MySingleton mys = MySingleton.getInstance();
String[] mySavedStrings = ys.getMyStrings();

Upvotes: 0

zapl
zapl

Reputation: 63955

Should work like you do it in the onClick part:

public void addComment(String LastComment)
{
    ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter();
    comment = datasource.createComment(LastComment);
    adapter.add(comment);
    adapter.notifyChange();
}

Upvotes: 1

Related Questions