0

グリッドビューがあり、それにボタンアダプターを設定しています。2つのボタンがあり、これらのボタンのOnclickリスナーを設定したいと思います。

 GridView gridview = (GridView) findViewById(R.id.gridView_table_select);
 gridview.setAdapter(new ButtonAdapter(this));

GridviewのgetView()メソッドで、グリッドアイテムとしてボタンを追加しています。ボタンのonClickリスナーも設定しています。

 public View getView(int position,
                           final View convertView, ViewGroup parent) {
  Button btn;

  if (convertView == null) {
   // if it's not recycled, initialize some attributes
   btn = new Button(mContext);
   btn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Context context = v.getContext();
            Intent intent = new Intent(context , Main.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    });
   btn.setLayoutParams(new GridView.LayoutParams(350, 65));
   btn.setPadding(8, 8, 8, 8);
   btn.setWidth(LayoutParams.WRAP_CONTENT);

ご覧のとおり、ボタンにonClickを設定し、新しいアクティビティを開始しようとしていますが、これらのボタンをクリックしても何も起こりません。何を修正すればよいですか?

4

5 に答える 5

1

Context context = v.getContext();代わりmContextに、すでにそこにあるものを使用してください

    if (convertView == null) {
           // if it's not recycled, initialize some attributes
           btn = new Button(mContext);
           btn.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    Intent intent = new Intent(mContext, //<-------------
Main.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(intent);
                }
            });
于 2012-06-25T07:20:42.157 に答える
1

Activityクラスを実装するAdapterView.OnItemClickListener

そしてoncreate()呼び出しで

gv.setAdapter(myAdapter);
gv.setOnItemClickListener(this);

onItemClick()を使用してアイテムのクリックを処理します

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    //Do something
}
于 2012-06-25T07:25:29.887 に答える
0

このようにしてください:

public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext() , Main.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
于 2012-06-25T07:18:44.827 に答える
0

クラスの先頭でコンテキストを設定してみてください。アクティビティでない場合はコンストラクターで設定してください。あなたはすでにやった。mContext。新しいコンテキストを取得する代わりに、そこで使用します。

于 2012-06-25T07:19:49.893 に答える
0

コードの修正はほとんどありません。

public View getView(int position,
                    final View convertView, ViewGroup parent) {
    Button btn = convertView;

    if (btn == null) {
       btn = new Button(mContext);
       btn.setOnClickListener(new OnClickListener() {

          public void onClick(View v) {
              Intent intent = new Intent(mContext, Main.class)
              intent .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              mContext.startActivity(intent);
          }
       });
       btn.setLayoutParams(new GridView.LayoutParams(350, 65));
       btn.setPadding(8, 8, 8, 8);
       btn.setWidth(LayoutParams.WRAP_CONTENT);
   }
   // set some text or do something
   ...
   return btn;
}
于 2012-06-25T07:23:43.600 に答える