2012-04-04 3 views
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(); 
} 
+0

Итак, в чем проблема? – kosa

+0

Зачем вам нужно добавлять в «ListView» из другого «Активность»? Почему вы не добавляете в источник данных ListView? –

+0

Посмотрите, в основном, что я пытаюсь сделать, это после того, как я проверил QRCODE в другом действии, мне нравится приложение, чтобы сохранить его историю в базе данных sqlite и добавить элемент к активности listview, когда доступны отсканированные результаты. – HeWhoProtects

ответ

0

использование android bundles, добавьте дополнительные значения из вашей активности в другую.

Или просто создайте один синглтон и используйте его как экземпляр из обеих ваших действий. Создать одно поле, например 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"}); 

А во втором:

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

ahh ok thank вы попробуем это – HeWhoProtects

+0

Я все еще получаю нулевое значение для комментария где comment = datasource.createComment (LastComment); в функции addComment – HeWhoProtects

+0

обновите свой код; где вы использовали singleton?добавьте код своего второго действия – pleerock

1

Должно работать, как вы делаете это в части OnClick:

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

Я сделал это с первого раза, а при отладке получаю нулевое значение для адаптера. getListAdapter() может получить списокAdapter, относящийся к другому действию, который делает его не существует в этом случае. – HeWhoProtects

+0

Это происходит, если вы вызываете 'addComment()' вашей деятельности до ее создания. Вам нужно найти способ передачи данных в нужное время и в нужном экземпляре вашей деятельности и т. Д. В зависимости от того, как выглядит отправляющая часть. – zapl

+0

спасибо, что пытались мне помочь :) – HeWhoProtects

Смежные вопросы