Новая активность не открывается - PullRequest
0 голосов
/ 25 мая 2018

Я студент из Италии, занимаюсь разработкой приложения для Android с последней версией Android Studio и Android API 26 (Android Oreo).

Приложение очень простое:1. Основная деятельность «MySchoolSyllabus»: показывает список школьных предметов, представленных изображениями, помещенными в папку проекта «res».2. Второе действие, «Materia» (оно означает «субъект»): после того, как пользователь нажимает на изображение субъекта, его нужно открыть, показывая другой список изображений, представляющих темы этого предмета так же, как и в предыдущем упражнении.,3. Заключительное действие, «Argomento» (что означает «тема»): как только пользователь нажимает на изображение темы, его нужно открыть, показывая урок темы с помощью WebView (все уроки я сохраню в общедоступном GoogleDrive account).

Я использую ItemAdapter для создания списков предметов и тем.Я не очень разбираюсь в программировании на Android, поэтому я не все кодировал ... Но когда я нажимаю на изображение в упражнении «MySchoolSyllabus», второе занятие «Materia» не открывается.

Это то, что я написал сейчас.

Как я могу решить?

// 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 (аналогично разметке XML materia)

<?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>

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Пожалуйста, объявите все действия в файле AndroidManifest.

0 голосов
/ 25 мая 2018
<?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;
    }

}
...