Android findViewById становится нулевым. Уже пробовал очистить проект, сначала установить содержимое

1

Помогите! Я получаю возвращаемое значение findViewById null. Я потратил много исследований и уже расчистил проект, поставил setContentView впереди, но он все еще терпит неудачу! Макет xml работает отлично, потому что, если я установил свой пользовательский вид обратно на синий, вид будет иметь синий цвет, как ожидалось при запуске приложения. Но я просто не могу использовать findViewById

макет xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<shaotian.android.blackboard.BBView
    android:id="@+id/bBView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</FrameLayout>

пользовательский класс представления, его родительский класс уже расширяет класс представления android:

package shaotian.android.blackboard;
import java.util.Observable;
import java.util.Observer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class BBView extends shaotian.android.blackboard.View {


public BBView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    TextView txt=new TextView(context);
    this.setBackgroundColor(Color.BLUE);

}
public BBView(Context context, AttributeSet attr)
{super(context);
this.setBackgroundColor(Color.BLUE);
}

public BBView(Context context,AttributeSet attr,int sty)
{
    super(context,attr,sty);
    this.setBackgroundColor(Color.BLUE);
}


@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
}

public void update(Observable arg0, Object arg1) {
    // TODO Auto-generated method stub

}

}

Класс деятельности:

package shaotian.android.blackboard;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class BlackBoardActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    BBView view=(BBView)findViewById(R.id.bBView1);

}
}
  • 0
    опубликовать этот класс shaotian.android.blackboard.View ...
  • 0
    Если ваш файл макета действительно называется layout.xml вам следует рассмотреть возможность вызова setContentView(R.layout.layout); вместо setContentView(R.layout.main); ,
Показать ещё 1 комментарий
Теги:
findviewbyid

1 ответ

2
Лучший ответ

Вы вызываете неправильный супер-конструктор здесь:

public BBView(Context context, AttributeSet attr)
{
   super(context);
   this.setBackgroundColor(Color.BLUE);
}

Должно быть:

public BBView(Context context, AttributeSet attr)
{
   super(context, attr);
   this.setBackgroundColor(Color.BLUE);
}

Кроме того, в вставленном коде для операции я не вижу импорт для R, убедитесь, что вы импортировали свой файл проекта R, а не com.android.R по ошибке.

  • 0
    Ahhhhh !! Спасибо чувак! оно работает!!
  • 0
    здорово :) рад, что смог помочь ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню