5

コードに構文エラーがあります。「getView」で、ボタン「update」のリスナーを作成して、別のアクティビティに移動します。

ここに画像の説明を入力

@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(Intent) は型 new View.OnClickListener() に対して未定義です

  2. メソッド getApplicationContext() は型 new View.OnClickListener() に対して未定義です

これらのステートメントを「onClick」メソッドから移動しても、問題は変わりませんでした!! 「インテント」ライブラリをインポートしましたが、それを解決するには????

4

5 に答える 5

14

アダプターが別のファイルにある場合は、アクティビティ コンテキストが必要になります。

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

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

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

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

アクティビティ コンテキストまたはアプリケーション コンテキストをいつ呼び出すか?

コモンズウェアによる回答を確認してください。

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

            Intent redirect = new Intent(context,Update.class);
            context.startActivity(redirect);    
      }
      });
于 2013-07-06T18:45:37.257 に答える
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);

          }
      });
于 2013-07-06T18:44:19.220 に答える
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();

    }
}
于 2015-08-20T08:27:06.937 に答える
1

context.startActivity代わりに電話するだけで、以下の手順に従うことができます

3 つの簡単なステップ

1) ローカル変数を宣言するContext mCtx

2)パラメーターをコンストラクター/メソッドに渡すか、アクティビティで上記のコードを使用している場合は onCreate メソッドで、アクティビティコンテキストで初期化します。

3) コールmCtx.startActivity(intent);

また

あなたは電話することができますActivityName.this.startActivity()

編集:- dmon コメントに従って、ローカル コンテキスト インスタンスを使用するだけです。

于 2013-07-06T18:44:50.997 に答える
0

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

新しいアクティビティを起動できるコンテキストを取得するために、viewgroup.getContext() を呼び出すことで、インフレートしているビューの親のコンテキストをいつでも取得できます。ただし、ビューグループを final として宣言する必要があります。親に触れてはならないので、これは問題ありません。

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;
}
于 2014-07-02T14:48:48.093 に答える