I have two Edit Text, in which user enters their first name and surname. I want to display the names and surnames below in a list view. So, if users enters name and surname for the first time it should display in row 1 of list view, and for 2nd entry it should display in row 2 of the list veiw. My problem is that when I am doing a new entry, it replaces the text in the 1st row of list view and doesn't display in 2nd or next rows in list view.
Please see my code. It will be great if you can help me.
below is my Java code
''' package com.nitin.inflaterproject;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
ListView list;
EditText editText1, editText2;
LinearLayout linearLayoutMain;
MyAdapter adapter;
int counter;
public void addData(View view){
String text1 = editText1.getText().toString();
String text2 = editText2.getText().toString();
if(text1.equals("") || text2.equals("")){
Toast.makeText(this, "Please enter required field", Toast.LENGTH_SHORT).show();
}else{
counter++;
Toast.makeText(this, "Counter value is " + counter, Toast.LENGTH_SHORT).show();
adapter = new MyAdapter(this, text1, text2,counter);
list.setAdapter(adapter);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayoutMain = (LinearLayout)findViewById(R.id.linearLayoutMain);
editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);
list = (ListView)findViewById(R.id.listViewMain);
counter = 0;
}
}'''
And then Base Adapter Code
'''package com.nitin.inflaterproject;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
class MyList{
String text1;
String text2;
MyList(String text1, String text2){
this.text1 = text1;
this.text2 = text2;
}
}
class MyAdapter extends BaseAdapter {
ArrayList<MyList> list;
private Context context;
private int count;
MyAdapter(Context c, String text1, String text2, int counter){
count = counter - 1;
context = c;
list = new ArrayList<MyList>();
String[] textstring1 = new String[counter];
String[] textstring2 = new String[counter];
textstring1[count] = text1;
textstring2[count] = text2;
list.add(new MyList(textstring1[count], textstring2[count]));
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row==null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.myadapter, parent, false);
}
TextView text1 = (TextView)row.findViewById(R.id.textView1);
TextView text2 = (TextView)row.findViewById(R.id.textView2);
MyList temp = list.get(position);
text1.setText(temp.text1);
text2.setText(temp.text2);
return row;
}
}'''
my XML Code
Main Activity
'''<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/enter_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/enter_surname"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText1" />
<Button
android:id="@+id/buttonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="68dp"
android:onClick="addData"
android:padding="10dp"
android:text="@string/add"
android:textSize="20sp"
app:layout_constraintStart_toEndOf="@+id/editText1"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayoutMain"
android:layout_width="311dp"
android:layout_height="468dp"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:background="#77BBCC00"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText2">
<ListView
android:id="@+id/listViewMain"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
'''
XML code for Layout that needs to be inflated
'''<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:id="@+id/linearLayout">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="24sp"
android:background="#99BBCC00"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="24sp"
android:background="#BBCC00"/>
</LinearLayout>'''
I solved it by changing the code:
'''package com.nitin.inflaterproject;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView list;
EditText editText1, editText2;
LinearLayout linearLayoutMain;
MyAdapter adapter;
int counter;
int count = 0;
ArrayList<MyList> list1;
public void addData(View view){
String text1 = editText1.getText().toString();
String text2 = editText2.getText().toString();
if(text1.equals("") || text2.equals("")){
Toast.makeText(this, "Please enter required field", Toast.LENGTH_SHORT).show();
}else{
//counter++;
//Toast.makeText(this, "Counter value is " + counter, Toast.LENGTH_SHORT).show();
// adapter = new MyAdapter(this, text1, text2,counter);
//list.setAdapter(adapter);
counter++;
count = counter - 1;
String[] textstring1 = new String[counter];
String[] textstring2 = new String[counter];
textstring1[count] = text1;
textstring2[count] = text2;
list1.add(new MyList(textstring1[count], textstring2[count]));
adapter = new MyAdapter(this, list1);
list.setAdapter(adapter);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list1 = new ArrayList<MyList>();
linearLayoutMain = (LinearLayout)findViewById(R.id.linearLayoutMain);
editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);
list = (ListView)findViewById(R.id.listViewMain);
counter = 0;
}
}
class MyList{
String text1;
String text2;
MyList(String text1, String text2){
this.text1 = text1;
this.text2 = text2;
}
}'''
'''package com.nitin.inflaterproject;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
class MyAdapter extends BaseAdapter {
ArrayList<MyList> list;
private Context context;
MyAdapter(Context c, ArrayList<MyList> list1){
context = c;
list = new ArrayList<MyList>(list1);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row==null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.myadapter, parent, false);
}
TextView text1 = (TextView)row.findViewById(R.id.textView1);
TextView text2 = (TextView)row.findViewById(R.id.textView2);
MyList temp = list.get(position);
text1.setText(temp.text1);
text2.setText(temp.text2);
return row;
}
}'''