2017-07-05 69 views
1

我創建了一個測試項目,並且在該項目中,我嘗試創建一個用戶可以在單擊按鈕時添加的列表視圖。該按鈕用editText和另一個按鈕打開一個新的活動,返回到listview活動,並且應該添加一個項目。它第一次工作,但是當我添加另一個項目時,它取代了舊項目。我現在搜索了一段時間,其他所有答案似乎都沒有幫助我。提前致謝。ListView替換第一個對象而不是添加一個新對象

public class MainActivity extends Activity { 

ListView simpleList; 
String input; 
ArrayList<Item> listItems =new ArrayList<>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    simpleList = (ListView) findViewById(R.id.listView); 
    addData(); 
    MyAdapter myAdapter=new MyAdapter(this,R.layout.row, listItems); 
    simpleList.setAdapter(myAdapter); 
} 

public void addData(){ 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     input = extras.getString("Homework"); 
     listItems.add(new Item(input, input, input)); 
    } 
} 

public void toInput(View view){ 
    Intent intent = new Intent(this, inputScreen.class); 
    startActivity(intent); 
}} 

這是我的主要活動,適配器是在這個類中製作的自定義適配器。

public class MyAdapter extends ArrayAdapter<Item> { 
ArrayList<Item> listItems = new ArrayList<>(); 

public MyAdapter(Context context, int textViewResourceId, ArrayList<Item> objects){ 
    super(context, textViewResourceId, objects); 
    listItems = objects; 
} 

public int getCount(){ 
    return super.getCount(); 
} 

public View getView(int position, View convertView, ViewGroup parent){ 
    View v = convertView; 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    v = inflater.inflate(R.layout.row, null); 
    TextView textView = (TextView) v.findViewById(R.id.homeworkDisplay); 
    TextView textView2 = (TextView) v.findViewById(R.id.dueDisplay); 
    TextView textView3 = (TextView) v.findViewById(R.id.classDisplay); 
    textView.setText(listItems.get(position).getHomework()); 
    textView2.setText(listItems.get(position).getDate()); 
    textView3.setText(listItems.get(position).getClasses()); 
    return v; 
}} 

被添加到列表視圖是從另一個活動是得到它從EDITTEXT發送的字符串,這裏是

public class inputScreen extends Activity{ 

EditText userInput; 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.input_screen); 
    userInput = (EditText) findViewById(R.id.editText); 


} 

public void sendInfo(View view){ 
    Intent goingBack = new Intent(this,MainActivity.class); 
    goingBack.putExtra("Homework", userInput.getText().toString()); 
    startActivity(goingBack); 

}} 

我知道有很多的代碼在那裏,你不不需要經歷這一切,因爲我確定問題出在MainActivity上。我有另一個類稱爲項目返回作業。謝謝!

回答

0

使用的startActivity()不正確。 您的活動堆棧是這樣的:

開始 ~~~~~~~~~~~~ MainActivity ~~~~~~~~~~~~

你打電話toInput後在MainActivity()

~~~~~~~~~~~~ InputScreen(活動) MainActivity ~~~~~~~~~~~~

那麼當你調用send( )in InputScreen

~~~~~~~~~~~~ MainActivity InputScreen MainActivity ~~~~~~~~~~~~

看到發生了什麼?

在InputScreen你第一次調用send()的額外

開始MainActivity然後你開始一個新的MainActivity,然後去了addData(),你得到的數據,以及改變的ListView。

但是當你再這樣做,你總是開始新的活動,因此只有第一個是要去改變

總是重複第一步總是開始一個新的活動

,你應該調用startActivityForResult()在MainActivity啓動inputScreen並覆蓋MainActivity中的onActivityResult方法

只需google startActivity和startActivityForResult即可解決此問題。 你應該谷歌花葯關鍵詞是,ListView控件 - >數據源

對不起,我不是以英語爲母語,如果我做錯了,請原諒我~~~~

+0

謝謝老兄,我會檢查一下,看看它是否有效 –

+0

嘿,我明白了,謝謝你。乾杯兄弟! –

+0

很高興聽到這個消息,~~歡迎您 –

0

撰稿:https://stackoverflow.com/users/2936153/rohit5k2

來源:Listview replaces first item instead of creating new items

每次調用changeText()適配器復位,所以只有一個 項目將顯示

更改您的片段像這樣

時間
public class ListViewFragment1 extends Fragment { 

protected ArrayAdapter<String> adapter1; 
ListView list1; 

@Override 
public View onCreateView(LayoutInflater inflater, 
     @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.list_view_fragment1, container, false);  
    adapter1 = new ArrayAdapter<String>(getActivity(), R.layout.items); 
    list1 = (ListView) view.findViewById(R.id.listview1); 
    list1.setAdapter(adapter1); 
    return view; 
} 

public void changeText(String data){ 
    adapter1.add(data); 
    adapter1.notifyDataSetChanged(); 
} 
} 
+0

這不幫助我,我已經讀過這個,但我仍然不知道該怎麼做。 –

+0

我會很快寫出你的源代碼。 –

+0

這可能需要一段時間。 –

相關問題