2017-07-05 8 views
1

Ich habe ein Testprojekt erstellt, und in diesem Projekt versuche ich eine Listenansicht zu erstellen, die der Benutzer hinzufügen kann, wenn er auf eine Schaltfläche klickt. Die Schaltfläche öffnet eine neue Aktivität mit einem editText und eine weitere Schaltfläche, um zur Listview-Aktivität zurückzukehren, und ein Element sollte hinzugefügt worden sein. Es funktioniert das erste Mal, aber wenn ich ein anderes Item hinzufüge, ersetzt es das alte. Ich habe jetzt eine Weile gesucht, und alle anderen Antworten scheinen mir nicht zu helfen. Danke im Voraus.ListView ersetzt das erste Objekt, anstatt ein neues Objekt hinzuzufügen

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

Dies ist meine Haupttätigkeit, der Adapter ist ein benutzerdefinierter Adapter, der in dieser Klasse hergestellt wird.

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

Die Zeichenfolge, die zur Listenansicht hinzugefügt wird, wird von der anderen Tätigkeit gesendet, die sie von einem editText bekommt, hier ist es Klasse

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

}} 

Ich kenne eine Menge Code gibt es, Sie don Ich muss das alles durchgehen, da ich mir sicher bin, dass das Problem in MainActivity liegt. Ich habe eine andere Klasse namens Items, die Hausaufgaben zurückgibt. Vielen Dank!

Antwort

0

Verwendet startActivity() ist nicht korrekt. Ihre Aktivität Stapel ist wie folgt:

der Start ~~~~~~~~~~~~ MainActivity ~~~~~~~~~~~~

nach toInput rufen in MainActivity()

~~~~~~~~~~~~ InputScreen (Aktivität) MainActivity ~~~~~~~~~~~~

dann, wenn Sie senden rufen () in InputScreen

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

sehen, was passiert?

das erste Mal in InputScreen Sie send() starten MainActivity mit Extras

dann begann eine neue MainActivity genannt, ging dann die addData(), Sie haben Daten und geänderte Listview.

aber wenn Sie es wieder tun, Sie immer wieder neue Aktivitäten starten, so wird nur der erste war Gonna Change

immer wiederholen Sie den ersten Schritt immer eine neue Tätigkeit beginnen

sollten Sie rufen startActivityForResult() in MainActivity, um inputScreen zu starten und überschreiben Sie die onActivityResult-Methode in MainActivity

nur Google StartActivity und StartActivityForResult Sie werden dies ausarbeiten. und anthere Schlüsselwort ist von Google sollte, Listview -> Datenquelle

sorry, ich bin kein Muttersprachler Englisch, wenn ich etwas falsch gemacht haben, bitte vergib mir ~~~~

+0

Danke Kumpel, ich werde das überprüfen und sehen, ob es funktioniert –

+0

Hey, ich habe es dank dir herausgefunden. Prost, Mann! –

+0

froh, das zu hören, ~~ du bist willkommen –

0

Geschrieben von: https://stackoverflow.com/users/2936153/rohit5k2

Quelle: Listview replaces first item instead of creating new items

Jedes Mal, wenn Sie changeText() Ihr Adapter rufen wird so zurückgesetzt wird, nur ein Artikel

ändern Fragment wie folgt

angezeigt
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

Dies gilt nicht hilf mir, ich hatte das schon gelesen und weiß immer noch nicht was ich machen soll. –

+0

Ich werde deinen Quellcode in Kürze schreiben. –

+0

Das könnte eine Weile dauern. –

Verwandte Themen