Как расширить AppCompatActivity для действия, которое расширяет ArrayAdapter >? - PullRequest
0 голосов
/ 18 июня 2020

Я обновил Android Studio с 3.XX до 4.0. В конце концов, некоторые имена действий, объявленные в AndroidManifest. xml, были подчеркнуты с просьбой о следующих действиях.

This class should provide a default constructor.
Class must extend android.app.Activity 

Я преодолеваю эти ошибки нескольких действий, объявив пустой конструктор и расширив [AppCompatActivity]. Но для нескольких других действий, расширяющих ArrayList [например, приведенного ниже], я не могу расширить [AppCompatActivity].

public class Apex extends ArrayAdapter<HashMap<String, String>> {

}

Множественное наследование в Java не разрешено, только по интерфейсу. Как это исправить?

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Обычно вам нужно использовать композицию, а не наследование.

Таким образом, вам не нужно наследовать ArrayAdapter, просто создайте экземпляр ArrayAdapter как поле Activity.

Например https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView

1 голос
/ 18 июня 2020

Действия - это действия, а адаптеры массивов - это адаптеры массива для представлений списков или любого другого типа списков. Когда вы расширяете класс из другого, это означает, что оба класса имеют одно и то же назначение / использование, что не относится к действию и адаптеру массива.

Если вы определяете действие в манифесте, то действие может только расширяться любое другое действие платформы (Activity, AppCompatActivity и др. c ..), тогда вы должны создать другой класс, расширяющийся от ArrayAdapter, и использовать его в своем классе действий.

0 голосов
/ 30 июня 2020
import android.Manifest;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;

public class Exter extends AppCompatActivity{

            public static ArrayList<HashMap<String, String>> myList;
            private Apx adapter; /// Instance for Adapter

            @Override
            protected void onCreate(Bundle savedInstanceState) 
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);       
              
            }
            
    //// Here coded the Adapter class       
            
    public class Apx extends ArrayAdapter<HashMap<String, String>> 
    {
     
        public ArrayList<HashMap<String, String>> ApList;
        Activity activity;
       
        public Apx(Activity activity, ArrayList<HashMap<String, String>> ApList) 
        {
            super(activity, R.layout.simple, ApList);
            this.activity = activity;
            this.ApList= ApList;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            return convertView;
        }

    }
        
}   

Надеюсь, понятно!

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