我无法访问我创建的View类的方法

时间:2014-10-06 02:04:58

标签: java android view

我正在构建一个带有显示动画的屏幕(活动)的应用程序,以及一个应该显示动画选项的第二个屏幕。

我创建了自己的自定义View类(一个扩展View的类),它就在我放置onDraw方法和动画的类中。它工作得很好,我可以用手指拖过它来改变动画。我有方法可以改变动画的颜色和速度,我可以在类中访问它们,但我知道如何从其余部分访问它们应用

因此,在我的FractalView类(扩展View)中,我有一个changeColor方法。我想从设置活动屏幕访问该方法。但当我按下按钮进行颜色更改时,调用changeColor方法,我的应用程序会强行关闭。

我像这样访问View:

 FractalView fractalView = (FractalView) findViewById(R.id.fractalViewCanvas);
 fractalView.changeColor('G');

它没有给我任何错误,但是当我选择按钮时,它都会崩溃。

FractalDisplay活动屏幕加载FractalView视图就像加载按钮或TextView一样。所以FractalView类没有XML文件。

这是FractalView类中的方法:

public class FractalView extends View{

//variables... multiple constructors...

public FractalView(Context context, AttributeSet attrs) {
    super(context, attrs);
    thisContext = context;
    initializeVariables();

 //tonnes of methods... here's the one I want to access:

public void changeColor(char newColor){

    switch(newColor) {
       case 'G':
            paint.setColor(Color.GREEN);
            break;
        default:
            paint.setColor(Color.BLACK);
    }

当然,我实际上无法访问此类中的任何方法。我尝了几个。

以下是XML文件DisplayFractal中的代码,它成功地将FractalView加载到其屏幕上:

<com.pattmayne.fractalapp.FractalView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:id="@+id/fractalViewCanvas" />

老实说,我不知道提供什么其他信息。这不是一个巨大的应用程序,我相信有一些方法可以做到这一点......看起来很简单。由于动画显示在屏幕上,因此从类中清楚地创建了一个对象。我只需要获取对该对象的引用,并从我想要的任何地方访问它的方法!

如果您需要,我会提供更多信息。

编辑:感谢您回复,伙计。

好的,这是崩溃信息:

10-05 22:14:35.650  14597-14597/com.pattmayne.fractalapp W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41458450)
10-05 22:14:35.650  14597-14597/com.pattmayne.fractalapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
    at com.pattmayne.fractalapp.ChooseColorActivity$1.onItemClick(ChooseColorActivity.java:43)
    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
   ...
    tem.NativeStart.main(Native Method)

所以我猜这是一个空指针异常,就像我引用一个类但没有对象。如何获取正在运行的对象?

编辑#2:

没有“onClick”。我在.java文件中这样做:(方法调用接近底部):

public class ChooseColorActivity extends ActionBarActivity {

    FractalView fractalView;

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

    String [] colors = {"Green", "Blue", "Red", "Black"};

    ListAdapter theAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, colors);

    ListView theListView = (ListView) findViewById(R.id.colorListView);

    theListView.setAdapter(theAdapter);
    theListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            String colorPicked = "You selected " + String.valueOf(adapterView.getItemAtPosition(position));
            Toast.makeText(ChooseColorActivity.this, colorPicked, Toast.LENGTH_SHORT).show();
        fractalView = (FractalView) findViewById(R.id.fractalViewCanvas);
             fractalView.changeColor('G');
            loadFractalView();
        }
    });

}

编辑#3:

哦,这是loadFractalView()方法(调用包含FractalView视图的活动:

public void loadFractalView() {
    Intent getNameScreenIntent = new Intent(this, DisplayFractal.class);
    final int result = 1;
    startActivityForResult(getNameScreenIntent, result);
}

0 个答案:

没有答案