Три кнопки, три разных действия / выхода

#android #android-layout #button #android-intent

#Android #android-макет #кнопка #android-намерение

Вопрос:

Это мой первый пост здесь, и я очень новичок в программировании. У меня есть это задание, в котором у нас должны быть три разные кнопки, выполняющие три разные вещи.

  1. Первая кнопка вроде как делает то, что я хочу. Что означает изменение текста.

  2. Предполагается, что вторая кнопка открывает новое действие, где оно должно быть изображением. (Я уже выполнял это задание раньше, и это сработало, но когда вместе с чем-то другим это не сработало.)

  3. Предполагается, что третья кнопка открывает новое действие, и должно быть представление сетки с 6 изображениями.

Здесь первый XML-файл и java-файл. Который после нескольких попыток является самым простым (я думаю) способом начать, чтобы просто убедиться, что я могу нажимать кнопки и открывать следующее действие (на кнопках 2 и 3). Как вы видите, есть много попыток, не хочу ничего удалять, так как я не уверен в том, что я делаю. Итак, это комбинация разных попыток… Спасибо!

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
 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="match_parent"
android:background="#eee"
tools:context=".MainActivity">


<Button
    android:id="@ id/text_edit"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="72dp"
    android:background="#005622"
    android:text="Change text"
    android:textColor="#FFFFFF"
    android:textSize="24dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.498"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@ id/text_edit2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:padding="15dp"
    android:text="När du klickar på den här knappen amp;#xA; så kommer dess text att bytas ut."
    android:textAlignment="center"
    android:textSize="15sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@ id/text_edit" />


<Button
    android:id="@ id/activity2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="28dp"
    android:background="#ffff00"
    android:text="Naturens underverk"
    android:textSize="45dp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@ id/text_edit2" />

<TextView
    android:id="@ id/activitytext2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:padding="15dp"
    android:text="Klicka här så får du amp;#xA; se något väldigt vackert."
    android:textAlignment="center"
    android:textSize="15sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.497"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@ id/activity2" />

<Button
    android:id="@ id/activity3"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="18dp"
    android:background="#ff3111"
    android:text="Till sida 2"
    android:textSize="30dp"
    android:textStyle="italic"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.502"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@ id/activitytext2" />

<TextView
    android:id="@ id/activitytext3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:padding="15dp"
    android:text="Feelings..."
    android:textAlignment="center"
    android:textSize="15sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.501"
    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toBottomOf="@ id/activity3" />

<androidx.constraintlayout.widget.Group
    android:id="@ id/group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<androidx.constraintlayout.widget.Guideline
    android:id="@ id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_begin="20dp" />

<androidx.constraintlayout.widget.Guideline
    android:id="@ id/guideline2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_begin="20dp" />

<androidx.constraintlayout.widget.Barrier
    android:id="@ id/barrier"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:barrierDirection="left" />

<androidx.constraintlayout.widget.Barrier
    android:id="@ id/barrier2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:barrierDirection="top" />

<!--<Fragment
    android:id="@ id/fragment2"
    android:name=".com.example.lab2.mainactivity"
    android:layout_width="match-parent"
    android:layout_height="match-parent"
    />

<Fragment
    android:id="@ id/fragment1"
    android:name=".com.example.lab2.mainactivity"
    android:layout_width="match-parent"
    android:layout_height="match-parent"
    />
-->
</androidx.constraintlayout.widget.ConstraintLayout>



enter code here
package com.example.lab2;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.app.Activity;
import android.service.autofill.OnClickAction;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;

import java.util.ArrayList;
//Jag har så fruktansvärt många olika varianter jag testat nu så vill bara börja om...

public class MainActivity extends Activity implements View.OnClickListener {

 //   private Bundle savedInstanceState;

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

//När användaren trycker på knappen change text så sker detta under.

Button text_edit = findViewById(R.id.text_edit);
TextView text = findViewById(R.id.text_edit2);
Button activity2 = findViewById(R.id.activity2);
TextView activitytext2 = findViewById(R.id.activitytext2);
Button activity3 = findViewById(R.id.activity3);
TextView activitytext3 = findViewById(R.id.activitytext3);

text_edit.setOnClickListener(this):
activity2.setOnClickListener(this);
activity3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
    case R.id.text_edit:
        text.setText("Kolla, kolla vad hon kan!");
        break;

    case R.id.activity2:
        openactivity2() {
        activity2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick (View v) {
                openactivity2();
            }
        });
    }
    public void openactivity2() {
        Intent intent1 = new Intent(this, Activity2.class);
        startActivity(intent1);
    }
        break;

    case R.id.activity3:
        openactivity3() {
        activity3.setOnClickListener(new View.onClickListener() {
            @Override
            public void onClick(View v) {
                openactivity3();
            }
        });
    }
    public void openactivity3() {
        Intent intent2 = new Intent(this, Activity3.class);
        startActivity(intent2);
        }

        break;
    }
  }


  /* private Bundle savedInstanceState;
//En del av mig vill skriva in en if-sats och länka till andra classer,
//det borde gå att sätta flera knappar på samma sida då de gör olika saker.
//Dock väldigt lång?

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

        text = (TextView) findViewById(R.id.text_edit);
        text_edit = (Button) findViewById(R.id.text_edit);

        text_edit.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                text.setText("Kolla, kolla vad hon kan!");
            }
        });

  }
}*/
/*public void opentext_edit() { 
//Är detta för att du ville ha upp en toast när du klickade in dig?
    opentext_edit();

    Intent intent = new Intent(this, toast_activity.class);
    startActivity(intent); //behöver kanske alla intents ha olika namn?
}


private Button activity2; vill inte radera något för tidigt så kommenterar ut de i
säkerhetsskull


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

    activity2 = (Button) findViewById(R.id.activity2);
    activity2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick (View v) {
        openactivity2();
    }
    });
 }
 public void openactivity2() {
    Intent intent = new Intent(this, Activity2.class);
    startActivity(intent);
 }


private Button activity3;

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

    activity3 = (Button) findViewById(R.id.activity3);
    activity3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick (View v) {
            openactivity3();
        }
    });
 }
 public void openactivity3() {
    Intent intent = new Intent(this, Activity3.class);
    startActivity(intent);
  }

  //Här nedanför sker... detta sker när vi trycker på tredje knappen?

 private GridView gridView;
  private GridViewAdapter gridViewAdapter;

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

    gridView = (GridView) findViewById(R.id.gridView);
    gridAdapter = new GridViewAdapter(this , R.layout.grid_item_layout, getData());
    gridView.setAdapter(gridAdapter);

  }
  private ArrayList<ImageItem> getData(){
    final ArrayList<ImageItem> imageItems = new ArrayList<>();
    TypedArray imgs = getResources(), obtainTypedArray(R.array.image_ids);

    for (int i = 0; i < imgs.length(); i  ) {
        Bitmap bitmap = BitmapFactory.decodeResource(getResource(), 
imgs.getResourceId(I, -1));

    }
    return imageItems;
} */
  

Комментарии:

1. Ваш код вообще недействителен. Комментирование onCreate не дает приложению точки входа, вы также не можете найти viewbyid в переменных верхнего уровня. Несбалансированные скобки сами по себе должны вызывать сбой сборки

2. да, у меня какое-то время был onCreate, но, по-видимому, его прокомментировали (похоже, я перепробовал 100 разных способов), я вернул его обратно и должен был создать поле (что бы это ни было, у нас не было таких инструкций). Что касается переменных верхнего уровня, все в основном копируется / вставляется из yt-clip, и вот как он это сделал…

Ответ №1:

У вас почти получилось, вы просто ошиблись в некоторых основных вещах, я добавил комментарии, чтобы помочь вам понять, что происходит:

 public class MainActivity extends Activity implements View.OnClickListener {
    //Declare views
    //You first have to declare your views (Button, TextView, EditText etc)
    Button text_edit, activity2, activity3;
    TextView text, activitytext2, activitytext3;

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

        //Initialize views
        //You don't have to create a method when initializing your views
        //but it keeps your code in order
        initViews();

        //Set onclick listeners
        //Declare your click listeners and pass it the context of you activity "this"
        text_edit.setOnClickListener(this);
        activity2.setOnClickListener(this);
        activity3.setOnClickListener(this);
    }

    private void initViews() {
        text_edit = findViewById(R.id.text_edit);
        text = findViewById(R.id.text_edit2);
        activity2 = findViewById(R.id.activity2);
        activitytext2 = findViewById(R.id.activitytext2);
        activity3 = findViewById(R.id.activity3);
        activitytext3 = findViewById(R.id.activitytext3);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.text_edit:
                //Set text to TextView
                text.setText("Kolla, kolla vad hon kan!");
                break;
            case R.id.activity2:
                //Start Activity2
                Intent intent1 = new Intent(this, Activity2.class);
                startActivity(intent1);
                break;
            case R.id.activity3:
                //Start Activity3
                Intent intent2 = new Intent(this, Activity3.class);
                startActivity(intent2);
                break;
        }
    }
 }