2017-07-05 10 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()が正しくありません。

開始 あなたがtoInputを呼び出した後

~~~~~~~~~~~~ MainActivity ~~~~~~~~~~~~: アクティビティスタックは、このようなものですMainActivity()内

~~~~~~~~~~~~ InputScreen(アクティビティ) MainActivity あなたが送っ呼び出して

~~~~~~~~~~~~( )in InputScreen

MainActivity InputScreen MainActivity ~~~~~~~~~~~~ ~~~~~~~~~~~~ 10

は何が起こっている参照してください?

センドと呼ばInputScreenで初めて()エクストラ

でMainActivityを開始し、その後、あなたは、新しいMainActivityを開始し、その後(は、addDataを行ってきました)、あなたはデータを得て、リストビューを変更しました。

しかし、あなたは再びそれを行う際には、必ずこれだけ最初のつもり変化であった

常に最初のステップを繰り返し、常に新しい活動に

を開始し、あなたがに)(startActivityForResultを呼び出す必要があり、新たな活動を開始MainActivityを使用してinputScreenを開始し、MainActivityのonActivityResultメソッドをオーバーライドします。

Google startActivityとstartActivityForResultだけでこれを実行します。 とは、Googleなければならない葯キーワードは、リストビュー、です - >データソース

申し訳ありませんが、私は英語のネイティブスピーカーではないです、私は何か間違ったことをした場合、

+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

これには時間がかかることがあります。 –

関連する問題