Wie setze ich übergebene Werte (intent.putExtra) in einer nächsten Activity ein(getExtra)

  • Antworten:15
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 113

19.05.2014, 16:37:47 via Website

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Intent intent = null;
            switch(position){
                case 0:
                    intent = new Intent(MainActivity.this, AufgabenActivity.class);
                    intent.putExtra("aufgaben1", R.array.thema1_aufgaben);
                    startActivity(intent);
                    break;
                case 1:
                    intent = new Intent(MainActivity.this, AufgabenActivity.class);
                    intent.putExtra("aufgaben2", R.array.thema2_aufgaben);
                    startActivity(intent);
                    break;
            }
        }
    });

das ist mein Code in Activity 1. Ich möchte die Daten, die in R.array.themaX liegen in der nächsten Activity2 holen und in einer GridView sezten.

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_list, container, false);

        GridView aufgabenGrid = (GridView) rootView.findViewById(R.id.gridView);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_1,
                ...);

        aufgabenGrid.setAdapter(adapter);

        TextView themenTitle = (TextView) rootView.findViewById(R.id.themenTitle);
        return rootView;
    }

das ist der Code von Activtiy2.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.176

19.05.2014, 17:42:24 via Website

Das setzen macht man normalerweise so:

Intent myIntent = new Intent();

myIntent.putExtra("LatValue", (int)39485000);
myIntent.putExtra("LongValue", (int)-80142777);
startActivity(myIntent);

Then you can retrieve them with.. Also Lesen in der 2. Activity.
Bundle extras = getIntent().getExtras();
int latValue = extras.getInt("LatValue " );
int longValue = extras.getInt("LongValue " );

Für was musst du denn eine Ressourcen Variable an eine Andere weitergeben, du kannst doch in der neuen Activity auch getRecources benutzen oder sehe ich da was falsch?

— geändert am 19.05.2014, 17:42:52

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 113

19.05.2014, 18:03:00 via Website

Hallo Pascal P. ,

also ich habe in der ersten Activity1 eine ListView mit 10 Items. Jedes Item öffnet die SELBE activity2, ladet jedoch immer verschiedene Daten in die Activity2. Activity2 besteht aus einer GridView und ich möchte die Daten in dieser GridView laden. Eigentlich nix kompliziertes.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.176

19.05.2014, 18:41:56 via Website

Achso, dann müsste das trotzdem Funktionieren.
Merke: R.* beschreibt immer eine integer, d.h. du musst auch die integer aus dem intent holen.

Hast du es mit dem oberen Code schon versucht?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 113

19.05.2014, 19:06:31 via Website

Sicher?
Das funktioniert nämlich nicht.

public class AufgabenActivity extends Activity {

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

    GridView gridView = (GridView) findViewById(R.id.gridView);
    Bundle extras = getIntent().getExtras();
    int aufgaben1 = extras.getInt("aufgaben1");

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            aufgaben1);

    gridView.setAdapter(adapter);

    /*if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }*/
}

und in der Activity1 übergebe ich so die Daten.

public class MainActivity extends ListActivity {

String[] mThemenArray;

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

    ListView listView = getListView();
    ArrayAdapter<String> adapter;
    mThemenArray = getResources().getStringArray(R.array.themen);

    adapter = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            mThemenArray);

    setListAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Intent intent = null;
            switch(position){
                case 0:
                    intent = new Intent(MainActivity.this, AufgabenActivity.class);
                    intent.putExtra("aufgaben1", R.array.thema1_aufgaben);
                    startActivity(intent);
                    break;
                case 1:
                    intent = new Intent(MainActivity.this, AufgabenActivity.class);
                    intent.putExtra("aufgaben2", R.array.thema2_aufgaben);
                    startActivity(intent);
                    break;
            }
        }
    });
}

EDIT: die case-Anweisungen sollten 10 stück sein ... dies ist nur zum testen

— geändert am 19.05.2014, 19:07:39

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.176

19.05.2014, 20:02:47 via Website

Komsich, schau nochmal im inet nach, aber das sollte meinen Wissens funktionieren.

Vlt. ist der Code auch falsch.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 113

19.05.2014, 21:08:00 via Website

Keiner eine Idee wieso das nicht funktioniert. Bitte um Hilfe

Antworten
  • Forum-Beiträge: 113

19.05.2014, 21:15:34 via Website

Nein es hängt sich nicht auf. Die zweite Activity öffnet sich, aber die GridView und die Elemente, die ich übergebe werden nicht gesetzt. Quasi blanco Activtiy.

Antworten
  • Forum-Beiträge: 113

19.05.2014, 21:26:28 via Website

Also mein intent.putExtra() hat KEIN null. Gerade debugged.
Und mein Layout ist auch nicht falsch. Ich versteh das nicht.

EDIT:

Das ist mein Layout der zweiten Activity: activity_master.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="de.hsesslingen.mathekurs.AufgabenActivity$PlaceholderFragment">

<TextView
    android:text="@string/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="25dp"
    android:textSize="20dp"
    android:id="@+id/themenTitle" />

<GridView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/gridView"
    android:layout_below="@+id/themenTitle"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:numColumns="auto_fit"/>

</RelativeLayout>

— geändert am 19.05.2014, 21:42:56

Antworten
  • Forum-Beiträge: 113

20.05.2014, 08:33:54 via App

Okay ich habe es. Es liegt am putExtra uzw. übergibt er mir nicht die R.array.X. Habe es mit Strings versucht also auch mit getString und es klappt.

Wie fange ich jetzt aber in der zweiten Activity ab welche Position in der ersten Activity geklickt wurde?

Antworten
  • Forum-Beiträge: 113

20.05.2014, 10:17:26 via App

Super. Mit getPosition wahrscheinlich?

— geändert am 20.05.2014, 10:17:56

Antworten
  • Forum-Beiträge: 272

20.05.2014, 10:24:07 via Website

Kannst es doch dann auch mit putExtra mit übergeben und wertest dann diese Zahl aus, welches Listenelement ausgewählt wurde.

Antworten

Empfohlene Artikel