2012-06-15 12 views
5

新しいアクティビティを開くには、リストビューアイテムで簡単なクリックを行うための助けが必要です。私はここにこのような問題をたくさん見てきましたが、誰も私を助けませんでした。クリックリストビューで新しいアクティビティを開始する

public class CustomListView extends ListActivity { 

    private EfficientAdapter adap; 
    ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 

     adap = new EfficientAdapter(this); 
     setListAdapter(adap); 


    } 


    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 


     startActivity(new Intent(CustomListView.this, next.class)); 
    } 


    public static class EfficientAdapter extends BaseAdapter implements Filterable { 
     private LayoutInflater mInflater; 
     private Bitmap mIcon1; 
     private Context context; 

     public EfficientAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 
      this.context = context; 
     } 

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

      ViewHolder holder; 


      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.adaptor_content, null); 


       convertView.setOnClickListener(new OnClickListener() { 
        private int pos = position; 
        @Override 
        public void onClick(View v) { 


        } 
       }); 



      convertView.setTag(holder); 
      }else{ 
      // Get the ViewHolder back to get fast access to the TextView 
      // and the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
      } 


      return convertView; 
     } 

     ... 
    } 
} 

私もCustomListViewクラスからのonCreateメソッドの内部で、次のコードを追加してみましたが、それはどちらか動作しません

ListView lv = getListView(); 

// listening to single list item on click 
lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     startActivity(new Intent(CustomListView.this, next.class)); 

    } 
}); 
+0

「うまくいきません」というのは非常に曖昧です...アイテムをクリックしたときの最初の例はどうなりますか?何かエラーがありますか?もしあなたがそうしたら、それらを掲示してください。 – Sam

+0

@DDjordjevic: 'Intent'コンストラクタに渡す' one.this'のような 'one'は何ですか? 'CustomListView.this'を試してみてください。 – Squonk

答えて

3

CustomListViewクラスからonListItemClick()を削除し、メソッドをconvertView.setOnClickListener()の内部に配置します。

convertView.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(getApplicationContext(), two.class)); 
    } 
}); 
0

convertView.setOnClickListener(new OnClickListener() { 
    private int pos = position; 
    @Override 
    public void onClick(View v) {...} 
}); 

何にstartActivity(new Intent(one.this, two.class)); -codeを入れてみてくださいこれは参照していますか? a Context

+0

このアプローチは、私が試したいくつかの試みの一つであるが、私は次のエラー得た:この行で 複数のマーカーを \t - タイプ \t Activityから非静的メソッドstartActivity(インテント)をstatic参照できません \t - スコープ内でCustomListView型の囲むインスタンスにアクセスすることはできません。 私も使用しているクラスのone.classを変更しました。申し訳ありません。 –

+0

コンテキストが 'Adapter'に渡されているので、' startActivity(new intent(context、two.class)); 'を試してください。 – Nick

+0

- うまくいきません、私も前に試しましたが、エラーをスローします。アクティビティタイプ –

0

one.thisContextを指します。

アクティビティの名前がであるため、one.thisの代わりにCustomListView.thisと書く必要があります。

getApplicationContext()も使用できます。

1

このコードを試してください。私はそれがあなたの助けになると確信していますこのようなXMLファイルにクラスを設定しないでください。

setContentView(R.layout.second); 

上記のコードをクラスに入れたことを確認してください。そうしないと、新しいアクティビティを開いているときにエラーが発生します。

package com.exampled.list; 

import android.os.Bundle; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 

    String [] names ={ 
     "Iphone", 
     "Samsung", 
     "Nokia", 
     "Ericsson", 
     "BlackBerry", 
     "Benq" 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.activity_main); 
     setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,names)); 
    } 

    public void onListItemClick(ListView Parent, View v, int position,long id){ 
     startActivity(new Intent(MainActivity.this, Second.class)); 
     //Toast.makeText(this, "Clicked on : " + names[position], Toast.LENGTH_LONG).show(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
関連する問題