2015-10-16 13 views
8

私はアンドロイドの開発に新しく、少し変化する活動を変更しています。メソッド内からアクティビティを変更しようとしていますが、エラーcannot resolve method startActivityが発生し、パラメータの末尾にエラーCannot resolve constructor 'Intent (...)'があります。私はa question hereと同じ種類の問題を発見し、自分のプログラムに返信を実装しようとしましたが、喜びはありませんでした。メソッドstartActivity()を解決できません

ここでは、コードです:

public void open301(View view) { 
    Intent openThree = new Intent(this,ThreeZeroOne.class); 
    startActivity(openThree); 
} 

完全なコード:

public void open301(View view) { 
    startActivity(new Intent(CustomAdapter.this, ThreeZeroOne.class)); 
} 

コードの上にリンクされ、質問からの回答を見て前には、同じエラーが発生している。このように見えた

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.content.Intent; 

public class CustomAdapter extends BaseAdapter { 

String[] result; 
Context context; 
int[] imageId; 

private static LayoutInflater inflater = null; 

public CustomAdapter(selectGame SelectGame, String[] prgmNameList, int[] prgmImages) { 
    result = prgmNameList; 
    context = SelectGame; 
    this.imageId = prgmImages; 
    inflater = (LayoutInflater) context.getSystemService(Context. 
      LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    return result.length; 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public class Holder { 
    TextView tv; 
    ImageView img; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    Holder holder = new Holder(); 
    View rowView; 
    rowView = inflater.inflate(R.layout.game_selection, null); 
    holder.tv = (TextView) rowView.findViewById(R.id.txt); 
    holder.img = (ImageView) rowView.findViewById(R.id.img); 
    holder.tv.setText(result[position]); 
    holder.img.setImageResource(imageId[position]); 
    rowView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "Beginning game " + result[position], Toast.LENGTH_SHORT).show(); 

     } 
    }); 
    return rowView; 
} 

public void open301(View view) { 
    Intent openThree = new Intent(this,ThreeZeroOne.class); 
    startActivity(openThree); 
} 

}

+0

このメソッドをどこで実行しようとしますか?能動性で?クラス?断片? –

+0

クラスでは、コードが置かれた場所にコードを投稿します。 – COYG

答えて

26

あなたはすべきですお使いのアダプタのコンテキストを使用します。

public void open301(View view) { 
    Intent openThree = new Intent(context,ThreeZeroOne.class); 
    context.startActivity(openThree); 
} 
+2

'意図(これは間違っています – Blackbelt

2
あなたはこのように行うことができますので、lucklyすべてのビューは、コンテキストを持っている、あなたがから開始するコンテキストが必要になりますし、あなたの現在の活動「BaseAdapterは」コンテキストではない、新たな活動を開始するには

public void open301(View view) { 
    Intent openThree = new Intent(view.getContext(), ThreeZeroOne.class); 
    view.getContext().startActivity(openThree); 
} 
+0

これは幾分か機能しましたが、私はstartActivityのかっこ内にインテント名を入れる必要はありませんか?さもなければどのような活動を開始するかを知るでしょう。これはあなたの古いコメントと関連していました。 – COYG

+0

私は自分の答えを編集して、他の疑いを明確にしていますか? –

+1

'意図(これは間違っています – Blackbelt

1

まず、あなたのコンテキストを取得:

private Context context; 

public CustomAdapter(Context context) { 
     this.context = context;  
} 

そして:

  context.startActivity(openThree); 
関連する問題