ListView с ArrayAdapter - PullRequest
       16

ListView с ArrayAdapter

0 голосов
/ 17 марта 2019

Я пытаюсь создать ArrayAdapter для моего ListView для отображения списка контактов, но он говорит, что не может разрешить конструктор для адаптера массива. Пожалуйста, кто-нибудь может мне помочь и сказать мне, нужно ли мне создавать пользовательский адаптер или нет. Я также попробовал ArrayAdapter>, но это также не разрешает конструктор. Вот мой код:

package com.example.contactmanagement;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final int ADDCONTACT_REQUEST_CODE = 0;
    int idCounter = 0;
    List<Bundle> contacts = new ArrayList<Bundle>();


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

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        Bundle bundle = data.getExtras();
        contacts.add(bundle);
        String fname = bundle.getString("fname");
        String lname = bundle.getString("lname");
        String full_name = fname + " " + lname;
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        LinearLayout layout = (LinearLayout) findViewById(R.id.contactList);

        ArrayAdapter<List> itemsAdapter = new ArrayAdapter<List>(this, R.layout.textview, contacts);
        ListView listView = (ListView) findViewById(R.id.lv);
        listView.setAdapter(itemsAdapter);
        /*
        TextView textView = new TextView(this);
        textView.setLayoutParams(params);
        textView.setText(fname +" " + lname);
        textView.setId(idCounter);
        idCounter++;
        textView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                Intent contactDetails = new Intent("com.example.contactmanagement.ContactDetails");
                int counterID = v.getId();
                Bundle bundleToPass = contacts.get(counterID);
                contactDetails.putExtras(bundleToPass);
                startActivity(contactDetails);
            }
        });
        layout.addView(textView);
        */
    }
    public void onClick(View view) {
        Intent intent = new Intent(this, AddContact.class);
        startActivityForResult(intent, ADDCONTACT_REQUEST_CODE);
    }

}

1 Ответ

0 голосов
/ 17 марта 2019

Изменить эту строку:

ArrayAdapter<List> itemsAdapter = new ArrayAdapter<List>(this, R.layout.textview, contacts);

к этому:

ArrayAdapter<Bundle> itemsAdapter = new ArrayAdapter<Bundle>(this, R.layout.textview, contacts);

Для ArrayAdapter тип, который вы помещаете между <>, является типом, который используется для вашего массива.

В этом случае ваш List на самом деле является списком Связок, что означает, что contacts это просто список типа Bundle.

Следовательно, тип, который вы помещаете в <>, должен иметь тип Bundle, чтобы соответствовать типу вашего списка контактов.

Причина, по которой вы получили эту ошибку конструктора, заключается в том, что вы написали ArrayAdapter<List>, поэтому конструктор ожидал, что contacts будет Array или List типа List.

Еще одна вещь, которую стоит отметить ...

Ваш ArrayAdapter, вероятно, не даст ожидаемого результата, потому что он не знает, что делать с Bundle.

Если бы это был просто список String, то он будет знать, отображать это в макете R.layout.textview, но для типа Bundle он просто не будет знать, что вы хотите с ним делать если вы не создадите пользовательский адаптер для обработки этого типа.

Таким образом, вы можете создать собственный адаптер, который позволит вашему ListView знать, как отображать содержимое вашего Bundle, или , если ваша информация достаточно проста, , как одна строка , затем вы можете создать новый список, который содержит только эту простую строку и передать ее конструктору для ArrayAdapter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...