0

Я программирую приложение для андроида компаса Теперь у меня возникла проблема с тем, что я хочу добавить холст в основной файл XML с помощью кнопки «Назад», которую я создал, чтобы позволить пользователю вернуться в менюДобавление холста в LinearLayout

Я использовал addview() попробовать добавить холст компас в main.xml, но все же ошибка ошибка была NullPointerException на «mainLayout.addView (compassView);» в коде Main.java

вот мой код

MAIN.java

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    compassView = new MyCompassView(this); 
    setContentView(compassView); 
    LinearLayout mainLayout = (LinearLayout)findViewById(R.id.compasslayout); 
    LayoutParams imageViewLayoutParams = new LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    compassView.setLayoutParams(imageViewLayoutParams); 

    mainLayout.addView(compassView); 

MyCompassView.java

public class MyCompassView extends View { 

    private Paint paint; 
    private float position = 0; 

    public MyCompassView(Context context) { 
     super(context); 

     init(); 
    } 

    private void init() { 
     paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setTextSize(25); 
     paint.setStyle(Paint.Style.STROKE);  
     paint.setColor(Color.BLACK); 
     paint.setStrokeMiter(position); 
    } 

XML FILE

<LinearLayout 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:orientation="vertical" 
    tools:context=".Compass" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:paddingLeft="10dp" 
     android:paddingTop="10dp" 
     android:id="@+id/compasslayout"> 

     <Button 
     android:id="@+id/buttona" 
     android:layout_width="200dp" 
     android:layout_height="50dp" 
     android:background="@drawable/b_select" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:paddingLeft="10dp" 
     android:paddingTop="10dp"> 

    </LinearLayout> 
</LinearLayout> 

Пожалуйста, помогите мне, я застрял в этом уже день, и я не могу продолжать без конца этой задачи

+0

'mainLayout' is null? – Howard

ответ

1

Проблемы здесь:

compassView = new MyCompassView(this); 
setContentView(compassView); 
LinearLayout mainLayout = (LinearLayout)findViewById(R.id.compasslayout); 

Вы устанавливаете новый MyCompassView в качестве содержимое вместо вашего XML-файла. Это означает, что когда вы вызываете findViewById(), вид ID R.id.compasslayout не найден. Ваш звонок setContentView() должен быть setContentView(R.layout.mylayout).

+0

Я изменил setContentView (R.layout.mylayout), как вы сказали, но он все еще NULLPOINTER на mainLayout.addView (compassView); исходным файлом макета этого приложения является R.layout.compass –