Search code examples
androidlistandroid-activityimageviewimagebutton

New activity not opening


I'm an italian student developing an Android application with the latest version of Android Studio and with Android API 26 (Android Oreo).

The application is very simple:
1. Main activity, "MySchoolSyllabus": it shows a list of school subjects, represented by images placed in the "res" project's folder.
2. Second activity, "Materia" (it means "subject"): once the user clicks on a subject image, this activity needs to be opened, showing another list of images, representing that subject's topics in the same way of the previous activity.
3. Final activity, "Argomento" (it means "topic"): once the user clicks on a topic image, this activity needs to be opened, showing the topic's lesson using a WebView (I'll store all lessons on a shared Google Drive account).

I use an ItemAdapter to create the lists of subjects and topics. Now, I'm not so much expert in Android programming, so I didn't code everything... But when I click on an image in "MySchoolSyllabus" activity, the second activity "Materia" doesn't get opened.

This is what I wrote for now.

How can I solve?

//MySchoolSyllabus.java

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;

public class MySchoolSyllabus extends AppCompatActivity implements Item_Adapter.ItemListener {

Item_Adapter item_adapter;
ArrayList<Integer> pass = new ArrayList<>();
ArrayList<String> nome = new ArrayList<>();
ListView list;

void CaricaDati () {
    nome.clear();
    nome.add("Italiano");
    nome.add("Matematica");
    nome.add("Arte");
    nome.add("Biologia");
    nome.add("Chimica");
    nome.add("Elettronica");
    nome.add("Filosofia");
    nome.add("Fisica");
    nome.add("Geografia");
    nome.add("Informatica");
    nome.add("Inglese");
    nome.add("Storia");
    pass.clear();
    pass.add(R.drawable.italiano_banner);
    pass.add(R.drawable.matematica_banner);
    pass.add(R.drawable.arte_banner);
    pass.add(R.drawable.biologia_banner);
    pass.add(R.drawable.chimica_banner);
    pass.add(R.drawable.elettronica_banner);
    pass.add(R.drawable.filosofia_banner);
    pass.add(R.drawable.fisica_banner);
    pass.add(R.drawable.geografia_banner);
    pass.add(R.drawable.informatica_banner);
    pass.add(R.drawable.inglese_banner);
    pass.add(R.drawable.storia_banner);
    item_adapter.notifyDataSetChanged();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_my_school_syllabus);
    item_adapter = new Item_Adapter(this, R.layout.row, pass);
    item_adapter.setItemListener(MySchoolSyllabus.this);
    list = findViewById(R.id.lista);
    list.setAdapter(item_adapter);

    CaricaDati();
}

@Override
public void startNewIntent(int position) {
    Intent materia = new Intent(MySchoolSyllabus.this, Materia.class);
    materia.putExtra("materia", nome.get(position));
    startActivityForResult(materia, 10);
}
}

//Materia.java

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;

public class Materia extends AppCompatActivity implements Item_Adapter.ItemListener {

Item_Adapter item_adapter;
ArrayList<Integer> pass = new ArrayList<>();
ArrayList<String> nome = new ArrayList<>();
ListView list;
String arg, materia;

//Here I didn't code topics yet in the switch. I'll do it the future. This is not important now.
void CaricaDati (String m) {
    nome.clear();
    switch (m) {
        case "Italiano":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Matematica":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Arte":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Biologia":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Chimica":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Elettronica":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Filosofia":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Fisica":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Geografia":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Informatica":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Inglese":
            nome.clear();
            //
            pass.clear();
            //
            break;
        case "Storia":
            nome.clear();
            //
            pass.clear();
            //
            break;
    }
    item_adapter.notifyDataSetChanged();
}

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

    materia = getIntent().getStringExtra("materia");

    item_adapter = new Item_Adapter(this, R.layout.row, pass);
    item_adapter.setItemListener(Materia.this);
    list = findViewById(R.id.lista);
    list.setAdapter(item_adapter);

    CaricaDati(materia);
}

@Override
public void startNewIntent(int position) {
    arg = nome.get(position);
    String dispensa = materia + "_" + arg;
    Intent argomento = new Intent(Materia.this, Argomento.class);
    argomento.putExtra("dispensa", nome.get(position));
    startActivityForResult(argomento, 10);
}
}

//Item_Adapter.java

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.List;

public class Item_Adapter extends ArrayAdapter<Integer> {

public interface ItemListener {
     void startNewIntent(int position);
}

ItemListener listener = null;

public void setItemListener(ItemListener item) {
    listener = item;
}

public Item_Adapter(@NonNull Context context, int resource, @NonNull List<Integer> objects) {
    super(context, resource, objects);
}

@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row, parent, false);
    }

    LinearLayout linear = convertView.findViewById(R.id.materia);
    linear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(listener != null) listener.startNewIntent(position);
        }
    });

    ImageView imageView = convertView.findViewById(R.id.imageView);
    imageView.setBackgroundResource(getItem(position));

    return convertView;
}
}

//activity_my_school_syllabus.xml (is the same of materia XML layout)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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="wrap_content"
tools:context="com.example.fabio.myschoolsyllabus.MySchoolSyllabus">

<ListView
    android:id="@+id/lista"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

</LinearLayout>

//row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/materia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<ImageButton
    android:layout_width="match_parent"
    android:id="@+id/imageView"
    android:layout_height="120dp"/>

</LinearLayout>

//AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fabio.myschoolsyllabus">
<uses-permission android:name="android.permission.INTERNET" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MySchoolSyllabus">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Materia"></activity>
    <activity android:name=".Argomento"></activity>
</application>

</manifest>

Solution

  • <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/materia"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >    
        <ImageButton
            android:id="@+id/imgButton"
            android:layout_width="match_parent"
            android:layout_height="120dp"/>    
    </LinearLayout>
    

    ~

    public class Item_Adapter extends ArrayAdapter<Integer> {
    
        public interface ItemListener {
             void startNewIntent(int position);
        }
    
        ItemListener listener = null;
    
        public void setItemListener(ItemListener item) {
            listener = item;
        }
    
        public Item_Adapter(@NonNull Context context, int resource, @NonNull List<Integer> objects) {
            super(context, resource, objects);
        }
    
        @NonNull
        @Override
        public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.row, parent, false);
            }
    
        ImageButton imgButton = convertView.findViewById(R.id.imageButton);
    
        imgButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener != null) listener.startNewIntent(position);
            }
        });
    
        ImageView imageView = convertView.findViewById(R.id.imageView);
        imageView.setBackgroundResource(getItem(position));
    
        return convertView;
        }
    
    }