在我的MainActivity中有一個ListView和一個'添加'按鈕。當按鈕被按下時,你會被帶到第二個活動,該活動有一個表單,它接受一些輸入(tokenName、tokenID和averagePrice)并創建一個物件 "Token"。第二個活動也有一個按鈕,將令牌保存到TokenList中,并將你再次帶到MainActivity。 問題是,你剛創建的token沒有顯示,但如果你創建一個新的token,第一個token就會出現在ListView中
。MainActivity代碼:
public class MainActivity extends AppCompatActivity {
public static ListView listView;
ArrayList<String> arrayList = new ArrayList<>()。
private Button addButton;
public static ArrayAdapter<String> arrayAdapter;
private EditText name;
public static TokenList tokenList = new TokenList() 。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(s savedInstanceState)。
setContentView(R.layout.activity_main);
addButton = (Button) findViewById(R.id.addbutton);
listView = (ListView)findViewById(R.id.listview);
arrayAdapter = new ArrayAdapter<> (this, android.R.layout.simple_list_item_1, arrayList);
listView.setAdapter(arrayAdapter)。
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openAddToken()。
arrayList.clear()。
for(Token token : tokenList.tokenList){
addToList(token.getTokenName())。
}
}
});
}
//Calls addToList method in TokenList class.
public void addToList(String tokenName){
arrayList.add(tokenName)。
}
//Opens the second activity with the new token form。
public void openAddToken(){
Intent intent = new Intent(this, AddToken. class)。)
startActivity(intent)。
}
第二個活動代碼:
public class AddToken extends AppCompatActivity {
private Button addButton;
編輯文本 tokenName, tokenID, averagePrice;
TokenList tokenList = MainActivity.tokenList;
Token token = new Token()。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(s savedInstanceState)。
setContentView(R.layout.activity_add);
tokenName=(EditText) findViewById(R.id.tokenname2);
tokenID=(EditText) findViewById(R.id.tokenid2);
averagePrice=(EditText) findViewById(R.id.averageprice);
addButton = (Button) findViewById(R.id.add);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
token.setTokenName(tokenName.getText().toString())。
token.setTokenID(tokenID.getText().toString())。
token.setTokenName("err2")。
token.setAveragePrice(Double.parseDouble(averagePrice.getText().toString())。
tokenList.addToTokenList(token)。
完成()。
}
});
}
}
我怎樣才能在第二個活動中按下 "接受 "按鈕的瞬間更新MainActivity中的ListView? 我是java的新手,對android開發更是一竅不通,所以請隨時指出任何不好的做法。
謝謝你!
uj5u.com熱心網友回復:
更好的實作方式是使用一個本地資料庫,例如ROOM庫。
對于你的問題,更簡單的方法是在你的main中使用startActivityForResult()和onActivityResult()。
一個例子是,在你的AddToken.class的.onClick()方法中添加:
Intent resultIntent = new Intent()。
resultIntent.putExtra("some_key"/span>, "String data"/span>)。
setResult(Activity.RESULT_OK, resultIntent)。
完成()。
然后在MainActivity.class中添加以下內容:
//Inside the onClick() method in the onCreate()
//...
Intent intent = new Intent(MainActivity. this, AddToken.class)。)
startActivityForResult(intent, ANY_NOT_NEGATIVE_NUMBER)。
//...
//在onCreate()外添加以下內容作為一個新方法。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data)。
switch(requestCode) {
case (ANY_NOT_NEGATIVE_NUMBER) : {
if (resultCode == Activity.RESULT_OK) {
// TODO 提取從子活動回傳的資料。
String returnValue = data.getStringExtra("some_key")。
}
break。
}
}
}
在這段代碼中ANY_NOT_NEGATIVE_NUMBER是一個數字,你可以在你的MainActivity.class中定義。而不是有一個共享的參考,然后使用意圖的putExtra()方法(在你的AddToken.class中,將資料傳回MainActivity,并在那里將其添加到你的串列中,并在你的Listview配接器上使用notifyDataSetChanged通知配接器的變化。
我建議使用recyclerview以獲得更好的性能和功能。你可以查看這里。用RecyclerView創建動態串列
uj5u.com熱心網友回復:
你將專案添加到串列中,但沒有通知配接器。 配接器沒有辦法知道資料發生了變化,除非你通知它或重新創建它
配接器沒有辦法知道。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315712.html
標籤:

