#android #android-layout #button #android-intent
#Android #android-макет #кнопка #android-намерение
Вопрос:
Это мой первый пост здесь, и я очень новичок в программировании. У меня есть это задание, в котором у нас должны быть три разные кнопки, выполняющие три разные вещи.
-
Первая кнопка вроде как делает то, что я хочу. Что означает изменение текста.
-
Предполагается, что вторая кнопка открывает новое действие, где оно должно быть изображением. (Я уже выполнял это задание раньше, и это сработало, но когда вместе с чем-то другим это не сработало.)
-
Предполагается, что третья кнопка открывает новое действие, и должно быть представление сетки с 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;
}
}
}