0

構成アクティビティを使用して、RemoteViewsを使用してxmlファイル内のさまざまなビューの表示を切り替えています。最初は、ウィジェットが設定される前に構成アクティビティが呼び出されるので、更新する必要がないので、次を使用しました。

package com.example.test.clock.one;

 import android.app.Activity;
 import android.appwidget.AppWidgetManager;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.RemoteViews;

 public class chooseract extends Activity
 {
int mAppWidgetId;
RemoteViews rv;
AppWidgetManager appWidgetManager;
Context context;
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);      
}
public void buttonhandler(View view)
{
    rv = new RemoteViews(context.getPackageName(), R.layout.activity_main);
    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) 
    {
        mAppWidgetId =  extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    switch(view.getId())
    {
        case R.id.button1:
        {
            rv.setViewVisibility(R.id.analogClock1, View.VISIBLE);
            rv.setViewVisibility(R.id.analogClock2, View.INVISIBLE);

                finish();
                            break;
        }
        case R.id.button2:
        {               
            rv.setViewVisibility(R.id.analogClock1, View.INVISIBLE);
            rv.setViewVisibility(R.id.analogClock2, View.VISIBLE);
            finish();
                            break;

        }
    }


}   
}

しかし、それは空白のウィジェットを設定するだけです(デフォルトの可視性はINVISIBLEです)そして私は可視性を切り替えた後にappwidgetを更新しようとしました

package com.example.test.clock.one;

import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RemoteViews;

public class chooseract extends Activity
{
int mAppWidgetId;
RemoteViews rv;
AppWidgetManager appWidgetManager;
Context context;
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);      
}
public void buttonhandler(View view)
{
    rv = new RemoteViews(context.getPackageName(), R.layout.activity_main);
    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) 
    {
        mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    switch(view.getId())
    {
        case R.id.button1:
        {
            rv.setViewVisibility(R.id.analogClock1, View.VISIBLE);
            rv.setViewVisibility(R.id.analogClock2, View.INVISIBLE);
            break;

        }
        case R.id.button2:
        {               
            rv.setViewVisibility(R.id.analogClock1, View.INVISIBLE);
            rv.setViewVisibility(R.id.analogClock2, View.VISIBLE);
            break;

        }
    }

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    appWidgetManager.updateAppWidget(mAppWidgetId, rv);
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();
}   
}

しかし、NullPointerExceptionでボタンに触れると、これは強制的に閉じます。何かアイデアはありますか?

4

1 に答える 1

0
public class MainActivity extends Activity implements OnClickListener{

private int mAppWidgetId;
private RemoteViews rv;
private AppWidgetManager appWidgetManager;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    



    rv = new RemoteViews(this.getPackageName(), R.layout.activity_main);
    Button button1 = (Button)findViewById(R.id.button1);
    Button button2 = (Button)findViewById(R.id.button2);

    AnalogClock cos1 = (AnalogClock)findViewById(R.id.analogClock1);
    AnalogClock cos2 = (AnalogClock)findViewById(R.id.analogClock2);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) 
    {
        mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    switch(view.getId())
    {
        case R.id.button1:
        {
            rv.setViewVisibility(R.id.analogClock1, View.VISIBLE);
            rv.setViewVisibility(R.id.analogClock2, View.INVISIBLE);
            break;

        }
        case R.id.button2:
        {               
            rv.setViewVisibility(R.id.analogClock1, View.INVISIBLE);
            rv.setViewVisibility(R.id.analogClock2, View.VISIBLE);
            break;

        }
    }

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
    appWidgetManager.updateAppWidget(mAppWidgetId, rv);
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();
}   

}

いくつかの修正を追加しましたが、エラーは発生しません。:)

于 2013-01-02T11:56:30.063 に答える