0

私は Android 開発の初心者です。別のアクティビティからリスト項目の値を追加しようとしています。アクティビティ内からリスト項目を追加できるコードを書きましたが、アクティビティの外からは追加できません。

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


}

}

別のアクティビティでボタンをテストする

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());
     }
 };

助けてください !:)

ありがとうございました

--------------------------- 実用的なソリューション -------------------- --------------------------> 新しいクラスが作成されました

  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編集済み

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();
}
4

2 に答える 2

1

onClick部分で行うように機能するはずです。

public void addComment(String LastComment)
{
    ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter();
    comment = datasource.createComment(LastComment);
    adapter.add(comment);
    adapter.notifyChange();
}
于 2012-04-04T21:28:11.263 に答える
0

android bundlesを使用して、アクティビティから別のアクティビティに追加の値を追加します。

または、1つのシングルトンを作成し、両方のアクティビティからそのインスタンスを使用します。1つのフィールド(たとえばlistViewStrings)を作成し、そこに文字列を格納し、別のアクティビティからそれらを取得します(単一の(シングルトンの)インスタンスにアクセスすることによって)

新しいクラスを作成します。

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;
}

}

そして、最初のアクティビティで使用します。

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

そして2番目に:

MySingleton mys = MySingleton.getInstance();
String[] mySavedStrings = ys.getMyStrings();
于 2012-04-04T21:27:49.757 に答える