Я студент из Италии, занимаюсь разработкой приложения для 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>