web-dev-qa-db-ja.com

リストビューでアイテムをクリックすると、どのように新しいアクティビティが開きますか?

リストビューのアイテムをクリックして新しいアクティビティを開始できません。 onItemClickApkInfoActivityを開くことができるようにしたいです。実際にクリックしても何も起こりません。

protected void onItemClick(ListView l, View v, int position, long id, AdapterView<?> parent) {
        super.onListItemClick(l, v, position, id);

       final ApplicationInfo app = applist.get(position);

       PackageInfo packageInfo = (PackageInfo) parent.getItemAtPosition(position);

       AppDataActivity appData = (AppDataActivity) getApplicationContext();
       appData.setPackageInfo(packageInfo);

       Intent appInfo = new Intent(getApplicationContext(), ApkInfoActivity.class);
       startActivity(appInfo);

    }

問題が見つかりません。どうすれば解決できますか?

Logcatで編集:

10-29 17:14:07.710: E/AndroidRuntime(3535): FATAL EXCEPTION: main
10-29 17:14:07.710: E/AndroidRuntime(3535): Java.lang.ClassCastException: Android.content.pm.ApplicationInfo cannot be cast to Android.content.pm.PackageInfo
10-29 17:14:07.710: E/AndroidRuntime(3535):     at com.dd.application.MainActivity.onItemClick(MainActivity.Java:369)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AdapterView.performItemClick(AdapterView.Java:297)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AbsListView.performItemClick(AbsListView.Java:1149)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AbsListView$PerformClick.run(AbsListView.Java:2939)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AbsListView$2.run(AbsListView.Java:3622)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.os.Handler.handleCallback(Handler.Java:730)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.os.Handler.dispatchMessage(Handler.Java:92)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.os.Looper.loop(Looper.Java:137)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.app.ActivityThread.main(ActivityThread.Java:5323)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Java.lang.reflect.Method.invokeNative(Native Method)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Java.lang.reflect.Method.invoke(Method.Java:525)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:743)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:559)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at dalvik.system.NativeStart.main(Native Method)
14
David_D

これを使用して作業を行う

 list.setOnItemClickListener(new AdapterView.onItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
      Intent appInfo = new Intent(YourActivity.this, ApkInfoActivity.class);
       startActivity(appInfo);
   } 
});
18
Rizwan
public class MenuYangu extends ListActivity {

String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List",
"Download A File", "Upload A File", "Select Pdf files", "Memory Game",
"Dzidza Maths", "Write Exam" };

@Override
protected void onCreate(Bundle savedInstanceState) 
{
   // TODO Auto-generated method stub
   super.onCreate(savedInstanceState);
   setListAdapter(new ArrayAdapter<String>(Menuone.this,
   Android.R.layout.simple_list_item_1, classes));

}

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

if (position == 0) {
Intent intent = new Intent(this, QuizActivity.class);
startActivity(intent);
}
else if (position == 1) {
Intent intent = new Intent(this, SignUp.class);
startActivity(intent);
}
 else if (position == 2) {
 Intent intent = new Intent(this, FriendList.class);
 startActivity(intent);
 } 
 }

 }

 }
10
Rahul Bhavani

Intentを使用する必要があります。クリックしたリストビューアイテムデータを新しいアクティビティに渡すこともできます。

String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List",
"Download A File", "Upload A File", "Select Pdf files", "Memory Game",
"Dzidza Maths", "Write Exam" };

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                   
Intent intent = new Intent(getApplicationContext(),ApkInfoActivity.class);
                intent.putExtra("name",classes[i]);
                startActivity(intent);


        }
    });

}

出力:

ListView Open Another Activity OnItemClick

チュートリアル全体を見つけることができます こちら

1
Richard Kamere

たとえば、リストビューでテキストuをクリックしてアクティビティを開く場合、つまりリストビューで「abcd」がオプションをクリックし、「abcd」というまったく同じ名前のアクティビティを開く場合は、これを実行します。 。

public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {

    String temp=yourarray[position];


    try{
        Class myclass=Class.forName("yourpackagename."+temp);
        Intent in=new Intent(this,myclass);
        startActivity(in);
        }catch(Exception e){

        }


}
0
Jagdeesh

私の答えに説明を与える。投稿したコードと同じように、リストビューを順番に設定していると思います。コードのこの部分のみを確認します:super.onListItemClick(l、v、position、id);これは必要ありません。私が与えた例の場合:

lv.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
      if(position==0){
     Intent appInfo = new Intent(SwahiliService.this, DisplayActivity.class);
      startActivity(appInfo);
  } 
      if(position==1){
          Intent english=new Intent(SwahiliService.this,EnglishService.class);
          startActivity(english);
      }
      if(position==2){
          Toast.makeText(getApplicationContext(),"You have selected pst3", Toast.LENGTH_LONG).show();
      }

Lvと呼ばれるリストビューにリスターを設定しているだけです。アダプター(リストビュー項目のホルダー)は、View、位置のint、引数のlongの3つの変数を設定します。通常は0から始まる位置によるリストビュー(たとえば、int position = 1のようにインスタンス化して他の番号から開始することもできますが、アイテム数は1から始まります)。ここから、コントロール構造体を使用して、クリックされたアイテムごとにアクティビティを開始できます。私の場合、リストビューには3つのアイテムしかないと想定しているため、forループを使用しました。大きなリストビューアイテムにはforループを使用できます次のように現在のアクティビティを最初に参照することで新しいアクティビティを開始する方法に注意してください(SwahiliService.this)。これは安全に置き換えることができ(このキーワードのみ)、開始したいアクティビティに従います。これがもっと精巧になったことを願っています。

0
Martin Karari

メソッドヘッダーの可視性をprotectedからpublicに変更してみてください。

編集

これで、メソッドヘッダーが実際に間違っています。次のようになります。

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

変数は、それらが実装するインターフェースにあるのと同じ順序でなければなりません。

0
Andrew Schuster

リストビューにsetOnItemclickListener()を追加します。

0
Guna

// ArrayListとArrayAdapterを追加します。

    final ArrayList<String> listItems = new ArrayList<String>();
        listItems.add("image_one");
        listItems.add("image_two");
        listItems.add("image_three");

    ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<>(this, 
        Android.R.layout.simple_list_item_1, listItems);
        myListView.setAdapter(myArrayAdapter);

//クラスのArrayListを追加

    final ArrayList<Class> intents = new ArrayList<Class>();
        intents.add(image_one.class);
        intents.add(image_two.class);
        intents.add(image_three.class);

//リスト項目をクリックして、ArrayList of Classesからクラスを開きます:

    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
        position, long id) {

            Intent listIntent = new Intent(getApplicationContext(), 
            intents.get(position)); 
            startActivity(listIntent);
        }
    });

クラス名の画像はこちら

0
Stack Fox

これを使って:

Intent appInfo = new Intent(CurrentActivity.this, ApkInfoActivity.class); startActivity(appInfo);

0
GeertG