2013-07-06 8 views
5

"getView"ボタンのリスナーを作成したいのですが、コードに構文エラーがあります「別のアクティビティに移動するには:修正方法StartActivity(Intent)メソッドは、新しいView.OnClickListener()構文エラーのために定義されていません

enter image description here

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 


     LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     View rowView = l.inflate(R.layout.temp, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1); 
     Button update = (Button) rowView.findViewById(R.id.button1); 

//  update.setOnClickListener(new View.OnClickListener() { 
//   
//   @Override 
//   public void onClick(View v) { 
// 
//     Intent redirect = new Intent(getApplicationContext(),Update.class); 
//     startActivity(redirect); 
//    
//   } 
//  }); 




     textView.setText(sa.get(position)); 


     return rowView; 
    } 

私がこれらのエラーを修正しようとした "意図" が、私は:(

  1. startActivity(意図)があるメソッドを失敗しましたあなたndefinedタイプ新View.OnClickListener()のために

  2. 方法getApplicationContextは()型の新しいView.OnClickListener()

とさえ私は "onClickの" からこれらのステートメントを移動whene方法が定義されていません問題は変わっていない!! 私は "インテント"ライブラリをインポートしました。

+0

は、アダプタクラスです別のファイルに – Raghunandan

答えて

14

を使用することができます - :

3)あなたがActivityName.this.startActivity()

編集を呼び出すことができますmCtx.startActivity(intent);

または

を呼び出します別のファイルには、活動コンテキストが必要です。

アクティビティ・コンテキストをアクティビティ・クラスからアダプタ・コンストラクタに渡す必要があります。

http://developer.android.com/reference/android/content/Context.html#startActivity(android.content.Intent)

startActivityアクティビティクラスのメソッドです。したがって、アクティビティを開始するにはアクティビティコンテキストが必要です。

また、getApplicationContextの代わりにアクティビティコンテキストを使用します。

When to call activity context OR application context?

commonswareで答えを確認してください。

 update.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent redirect = new Intent(context,Update.class); 
      context.startActivity(redirect);  
     } 
     }); 
+1

@Akariは助けてくれてうれしいです。 – Raghunandan

+0

すべてのことは大丈夫です:)))) – Akari

2

てみ

final Activity thisActivity = this; 

update.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent redirect = new Intent(thisActivity,Update.class); 
       thisActivity.startActivity(redirect); 

      } 
     }); 
あなただけの代わりに context.startActivityを呼び出す必要が
1

、以下続く

三つの簡単なステップ

1)宣言ステップすることができます ローカル変数Context mCtx

2)とそれをintializeアクティビティコンテキストは、コンストラクタ/メソッドにパラメータを渡すか、onCreateメソッドで上記のco活動中である。あなたのアダプターが入っている場合は額面DMONのコメントとして、あなたは単にあなたのローカルコンテキストインスタンス

+0

すでにそのメソッドにコンテキスト変数があります。 – dmon

0

あなたの問題の根本は、あなたが(唯一の活動コンテキストから、あなたがそれを行う権利を持っている)アプリケーションコンテキストから活動を開始することができないということです。その理由は、アンドロイドは、アプリケーションごとにマルチタスクを許可するために、アプリケーションのすべてのアクティビティをグループ(タスク)としてバンドルするからです。新しいアプリケーションを起動するか、たとえばホームボタンを押すと、アプリケーションが(バックスタックと一緒に)バックグラウンドに移動し、シーンを新しいタスクに移します(バックスタックが異なるなど) )。このメカニズムの詳細についてはこちらをご覧ください(http://developer.android.com/guide/components/tasks-and-back-stack.html)。

新しいアクティビティを起動するのに便利なコンテキストを取得するには、viewgroup.getContext()を呼び出すことによって、いつも膨張しているビューの親のコンテキストを取得できます。ただし、宣言する必要はありますが最終的なビューグループは、あなたが親に触れてはいけないので大丈夫です。

あなたのgetViewメソッドのドラフト:私のために同様の問題のため

@Override 
public View getView(int position, View convertView, final ViewGroup parent) { 


    LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    View rowView = l.inflate(R.layout.temp, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1); 
    Button update = (Button) rowView.findViewById(R.id.button1); 

    update.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent redirect = new Intent(parent.getContext(),Update.class); 
      startActivity(redirect); 
     } 
    }); 




    textView.setText(sa.get(position)); 


    return rowView; 
} 
2

はちょうどこれが私を助け:

@Override 
    public void onClick(View v) { 
        Intent intent = new Intent(G.context, SecondActivity.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        G.context.startActivity(intent); 
    } 
    }); 

はGクラスにコンテキストを追加します。

public class G extends Activity { 

    public static Context context; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     context = getApplicationContext(); 

    } 
} 
関連する問題