1

単純なカスタマイズされたビューを作成し、onClickListener()をコンストラクターに登録しました。ビューインスタンスがクリックされたときに新しいアクティビティを開始するには、次のようなものを使用しました。

setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent(getContext(), com.test.myClass.class);
            Context context = getContext();
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(i);
        }
    });

私の知識レベルはまだ非常に低いので、これがビューからアクティビティを開始するための良い方法であるかどうかをさまよっていました。もしあれば、より良い方法は何でしょうか?

ありがとうございました!

4

1 に答える 1

4

この実装は非常に有効ですが、次の2つの点で改善できます。

YourView extends View{

  private boolean clicked = false;

  private final View.OnClickListener myOnClickListener = 
  new View.OnClickListener(){
    public void onClick(View v) {
        if (!clicked){
            clicked = true;
            Context context = getContext();
            Intent i = new Intent(context, com.test.myClass.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(i);   
        }
    }
  }


  public View(Context ctx){
    super(ctx);
    setOnClickListener(myOnClickListener);
  }
}

改善点は次のとおりです。ユーザーがビューを狂ったようにクリックすると、OnClickListenerが複数回トリガーされ、複数のアクティビティが開始される場合があります。ブール値はそれを修正します。また、OnClickListenerビュー内で1回宣言するだけで、複数回インスタンス化することはできませんが、常に同じです。

clicked注:ある時点でfalseに戻す必要がある場合があります(onPause()ビューを保持するアクティビティの適切な場所のようです)

于 2012-06-20T22:46:52.807 に答える