2015-10-06 3 views
-5

Я изучаю Android-разработчик Android Studio. Я создал приложение, которое отображает некоторый текст при броске, а другой - по щелчку кнопки. Но его показ «К сожалению приложение остановилось» Кроме того, у меня есть только одно действие. Таким образом, его не возможно, что я забыл, чтобы показать его в AndroidManifest.xml вот мой Java-код:Получение «К сожалению, приложение остановилось» при выполнении

package com.example.mahe.pro2; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 
import android.widget.Button; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.support.v4.view.GestureDetectorCompat; 

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener { 

private TextView tv = (TextView) findViewById(R.id.t); 
private GestureDetectorCompat gd; 
private Button bt = (Button) findViewById(R.id.b); 

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

    bt.setOnClickListener(
      new Button.OnClickListener() { 
       public void onClick(View v) { 
        tv.setText("That was a Click!"); 
       } 
      } 
    ); 
} 

@Override 
public void onLongPress(MotionEvent motionEvent) { 
} 

@Override 
public boolean onSingleTapUp(MotionEvent motionEvent) { 
    return false; 
} 

@Override 
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
    return false; 
} 

@Override 
public void onShowPress(MotionEvent motionEvent) { 

} 

@Override 
public boolean onDown(MotionEvent motionEvent) { 
    return false; 
} 

@Override 
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
    tv.setText("That was a Swipe, Baby"); 
    return true; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    this.gd.onTouchEvent(event); 
    return super.onTouchEvent(event); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 


    return super.onOptionsItemSelected(item); 
} 

}

Вот мой 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=".MainActivity"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="YO!" 
    android:id="@+id/t" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="62dp" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Click" 
    android:id="@+id/b" 
    android:layout_below="@+id/t" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="164dp" /> 

+2

Покажите свою ошибку LogCat – Sunny

ответ

2

Просто переезд

TextView tv = (TextView) findViewById(R.id.t); 
Button bt = (Button) findViewById(R.id.b); 

под onCreate(...) после setContentView(R.layout.activity_main);

+2

вы совершенны –

1

как сказал @MD вы должны сначала создать свой вид и setview, чтобы можно получить R.id.b

, но если вы хотите, чтобы объявить их в качестве глобальной переменной, используйте

private TextView tv; 
private Button bt 

выше метод OnCreate, то в методе OnCreate и под

setContentView (R.layout.activity_main);

использование

tv = (TextView) findViewById(R.id.t); 
bt = (Button) findViewById(R.id.b); 
Смежные вопросы