Как отобразить данные sqlite в пользовательском ListView - PullRequest
0 голосов
/ 24 января 2019

Я создаю простое приложение, где SQLite является источником базы данных. У меня есть в основном 2 кнопки, из которых одна сохраняет (кнопка Сохранить) данные, а другая отображает (кнопка Дисплей) с сообщением тоста. но теперь я хочу показать в пользовательском представлении списка с новым действием.

Это MainActivity.java

public class MainActivity extends AppCompatActivity {

    //variable for EditText
    EditText nameET, desigET, numberET, emailET, searcgET, updateID, newNameET;
    //creating a databaseHelper object
    DatabaseHelper dbHelper;
    //display button
    Button displayListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //mapping the XML editText with variables
        nameET = (EditText) findViewById(R.id.emp_name);
        desigET = (EditText) findViewById(R.id.designation);
        numberET = (EditText) findViewById(R.id.phone_number);
        emailET = (EditText) findViewById(R.id.email_add);
        searcgET = (EditText) findViewById(R.id.search_edt);
        updateID = (EditText) findViewById(R.id.id_for_update_edt);
        newNameET = (EditText) findViewById(R.id.change_name_edt);
        //display button mapping
        displayListView = (Button) findViewById(R.id.display_btn);
        //initialising the databaseHelper object
        dbHelper = DatabaseHelper.getInstance(getApplicationContext());

        //display button click
        displayListView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //as soon as display button clicked, start the new activity
                Intent displayActivityIntent =
                        new Intent(MainActivity.this, DisplayListView.class);
                startActivity(displayActivityIntent);
            }
        });

    }

    //defining the save button to save data into database
    public void saveData(View view){
        String name = nameET.getText().toString();
        String designation = desigET.getText().toString();
        String phone = numberET.getText().toString();
        String email = emailET.getText().toString();

        //building the employee object of type employee
        Employee employee = new Employee(name, designation, phone, email);
        //calling the insert method to insert the data
        long inserted = dbHelper.insertData(employee);

        if (inserted > + 0){
            Toast.makeText(getApplicationContext(), "Data inserted", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(getApplicationContext(), "Data insertion failed, with fail code -1", Toast.LENGTH_LONG).show();
        }
    }

Это еще одно занятие, в котором я хочу отобразить все данные из базы данных, когда пользователь нажимает «Показать» кнопка

public class DisplayListView extends AppCompatActivity {

    ListView displayEmployee;
    DatabaseHelper dbHelper;
    //declaring adapter
    CustomAdapter adapter;
    //declaring data source


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_list_view);

        displayEmployee = (ListView)findViewById(R.id.display_employee_list);
    }

    //displaying employee from database
    public void display(View view) {
        try {
            //get the employee list from the arrayList
            ArrayList<Employee> employees = dbHelper.getAllEmployees();
            //check if the arrayList is null or not
            if (employees != null && employees.size() > 0){
                //creating and passing argument to adapter object
                adapter = new CustomAdapter(DisplayListView.this, R.layout.list_item, employees);

            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

А это пользовательский адаптер

public class CustomAdapter extends ArrayAdapter<Employee> {

    //setting up the property
    Activity cont;
    ArrayList<Employee> employeeList;

    public CustomAdapter(Context context, int resource, ArrayList<Employee> employees) {
        super(context, resource);
        //initializing the object property
        this.cont = (Activity) context;
        this.employeeList = employees;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null){
            LayoutInflater inflater = cont.getLayoutInflater();
            view = inflater.inflate(R.layout.list_item, null);
            //getting the textView to display
            TextView nameTextView = (TextView) view.findViewById(R.id.display_name);
            TextView designationTextView1 = (TextView) view.findViewById(R.id.display_designation);
            TextView phoneTextView = (TextView) view.findViewById(R.id.display_phone);

            //set the text info from the position by calling employee object
            Employee emp = employeeList.get(position);
            nameTextView.setText(emp.getName());
            designationTextView1.setText(emp.getDesignation());
            phoneTextView.setText(emp.getPhone());


        }else{
            view = convertView;
        }
        return view;
    }
}

и это XML для настройки макета

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:background="#ee82ee"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/display_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="larg text"
        android:textColor="#0000ff"
        android:padding="15dp"
        android:textStyle="bold"
        android:textSize="20sp"
        android:textAlignment="center" />
    <TextView
        android:id="@+id/display_designation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="designation"
        android:textColor="#6a5acd"
        android:padding="5dp"
        android:textStyle="italic"
        android:textSize="15sp"
        android:textAlignment="center" />
    <TextView
        android:id="@+id/display_phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="phone"
        android:textAlignment="center"
        android:padding="10dp"
        android:textSize="15sp"
        android:textColor="#8b008b"/>
</LinearLayout>

, но когда я нажимаю кнопку «Показать», отображается пустое действие мой xml не отображается должным образом или адаптер не может загрузить данные из метода отображения.

1 Ответ

0 голосов
/ 24 января 2019

вы не настраиваете адаптер для своего списка после создания адаптера.

обновите свой код до

adapter = new CustomAdapter(DisplayListView.this, R.layout.list_item, employees);
displayEmployee.setAdapter(adapter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...