ArrayAdapter 内からアクティビティを開始する

アンキット

ArrayAdapter を拡張するカスタム アダプターがあります。EMAIL がクリックされたときに MapActivity に移動したい。インテント部分を削除すると、クリックしたアイテムの正しい位置でトーストが表示されます。ただし、startActivity 関数を追加すると、アプリがクラッシュします (トーストなし)。距離の取得や setters.getters などの関係のないコードを削除しました。ヘルプやポインターをいただければ幸いです!

ArrayAdapter コード

import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.client.ChildEventListener;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.android.gms.maps.model.LatLng;
import com.google.firebase.auth.FirebaseAuth;

import java.util.ArrayList;
import java.util.List;

public class TrackAdapter extends ArrayAdapter{

    private Context c;
    //ArrayLists to save items

    public TrackAdapter(Context context, int resource)
    {
        super(context, resource);
        this.c = context;
    }

    public void add(/*items to be added*/)
    {
       //add to ArrayLists and super.add()
    }

    static class RowHolder
    {
        TextView EMAIL;
        TextView DISTANCE;
    }

    @Override
    public int getCount()
    {
        return this.email.size();
    }

    @Override
    public Object getItem(int position)
    {
        return this.email.get(position);
    }

    /*other setters and getters*/

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row;
        row = convertView;
        RowHolder holder;

        final int currentPosition = position;

        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.track_item, parent, false);

            holder = new RowHolder();

            holder.EMAIL = (TextView) row.findViewById(R.id.track_item_text);
            holder.DISTANCE = (TextView) row.findViewById(R.id.track_item_distance);

            holder.EMAIL.setOnClickListener(new View.OnClickListener() 
            {
                @Override
                public void onClick(View v) 
                {
                    Toast.makeText(c, "item at position " + currentPosition, Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(c, MapActivity.class);
                    c.startActivity(intent);
                }
            });

            row.setTag(holder);
        }
        else
        {
            holder = (RowHolder) row.getTag();
        }


        String EM = (String) getItem(position);
        holder.EMAIL.setText(EM);

        //calculate and display distance

        return row;

    }
}

また、 c をc.getApplicationContext()andv.getContext()置き換えてみましたが、これも機能しません。

編集 - エミュレーターでアプリを実行すると、MapActivity に移動します。ただし、USB で接続された Android デバイスで実行すると、アプリがクラッシュします。

EDIT2 - クラッシュレポートはこちら

--------- beginning of crash
03-29 03:23:42.036 7768-7768/com.example.*******
E/AndroidRuntime: FATAL EXCEPTION: main

                                                                                android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
                                                                                    at android.app.ContextImpl.startActivity(ContextImpl.java:672)
                                                                                at android.app.ContextImpl.startActivity(ContextImpl.java:659)
                                                                                at android.content.ContextWrapper.startActivity(ContextWrapper.java:331)
                                                                                at com.example.ankit.findyourfellow.TrackAdapter$1.onClick(TrackAdapter.java:127)
                                                                                at android.view.View.performClick(View.java:5204)
                                                                                at android.view.View$PerformClick.run(View.java:21153)
                                                                                at android.os.Handler.handleCallback(Handler.java:739)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                at android.os.Looper.loop(Looper.java:148)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
そのスリバスタヴァ

クリック リスナー内で次のようなことを行います。

holder.EMAIL.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                Toast.makeText(c, "item at position " + currentPosition, Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(c, MapActivity.class);
                //if you want to send data to called activity uncomment next line
                // intent.putExtra("extra", "value"); 

                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                c.startActivity(intent);
            }
        });

それは動作するはずです:)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

カスタムArrayAdapterからメインアクティビティの関数を呼び出す方法は?

分類Dev

カスタム ArrayAdapter からのアクティビティの更新

分類Dev

異なるアクティビティで同じArrayAdapterを使用していますか?

分類Dev

ArrayAdapter <HashMap <String、String >>を拡張するアクティビティのAppCompatActivityを拡張する方法は?

分類Dev

別のアクティビティからArrayAdapterを呼び出して、strings.xml配列を持つArrayAdapterから項目を削除するにはどうすればよいですか?

分類Dev

ArrayAdapterを別のアクティビティに送信するためのコード?

分類Dev

setAdapter(ArrayAdapter);でアクティビティがクラッシュします。

分類Dev

カスタムArrayAdapterをフィルタリングするか、アクティビティで検索を実装します

分類Dev

arrayAdapterのインテントを使用して3番目のアクティビティに入るにはどうすればよいですか?

分類Dev

ArrayAdapterからフラグメントを開始する

分類Dev

ListViewからアクティビティを開始する方法

分類Dev

ArrayAdapterのアクティブアイテムを取得しています

分類Dev

XamarinAndroidで別のアクティビティからアクティビティを開始する

分類Dev

Android - 終了した親アクティビティを子アクティビティ onResume() から開始する

分類Dev

ArrayAdapterが2番目のアクティビティでデータを表示しない

分類Dev

アクティビティからDialogFragmentを開始します

分類Dev

アクティビティからDialogFragmentを開始します

分類Dev

NavigationDrawerからアクティビティを開始します

分類Dev

Javaクラスからアクティビティを開始する方法は?

分類Dev

ArrayAdapterでNullPointerExceptionを取得する

分類Dev

ArrayAdapterからアイテムを削除します

分類Dev

フラグメントからアクティビティを開始する

分類Dev

フラグメントからアクティビティを開始する

分類Dev

ADBシェルから共有アクティビティを開始する

分類Dev

アクティビティからフラグメントを開始する

分類Dev

NavigationViewから新しいアクティビティを開始する

分類Dev

NavigationViewから新しいアクティビティを開始する

分類Dev

クラスを持つArrayAdapter

分類Dev

PublishResult内のConcurrentModificationException-ArrayAdapter

Related 関連記事

  1. 1

    カスタムArrayAdapterからメインアクティビティの関数を呼び出す方法は?

  2. 2

    カスタム ArrayAdapter からのアクティビティの更新

  3. 3

    異なるアクティビティで同じArrayAdapterを使用していますか?

  4. 4

    ArrayAdapter <HashMap <String、String >>を拡張するアクティビティのAppCompatActivityを拡張する方法は?

  5. 5

    別のアクティビティからArrayAdapterを呼び出して、strings.xml配列を持つArrayAdapterから項目を削除するにはどうすればよいですか?

  6. 6

    ArrayAdapterを別のアクティビティに送信するためのコード?

  7. 7

    setAdapter(ArrayAdapter);でアクティビティがクラッシュします。

  8. 8

    カスタムArrayAdapterをフィルタリングするか、アクティビティで検索を実装します

  9. 9

    arrayAdapterのインテントを使用して3番目のアクティビティに入るにはどうすればよいですか?

  10. 10

    ArrayAdapterからフラグメントを開始する

  11. 11

    ListViewからアクティビティを開始する方法

  12. 12

    ArrayAdapterのアクティブアイテムを取得しています

  13. 13

    XamarinAndroidで別のアクティビティからアクティビティを開始する

  14. 14

    Android - 終了した親アクティビティを子アクティビティ onResume() から開始する

  15. 15

    ArrayAdapterが2番目のアクティビティでデータを表示しない

  16. 16

    アクティビティからDialogFragmentを開始します

  17. 17

    アクティビティからDialogFragmentを開始します

  18. 18

    NavigationDrawerからアクティビティを開始します

  19. 19

    Javaクラスからアクティビティを開始する方法は?

  20. 20

    ArrayAdapterでNullPointerExceptionを取得する

  21. 21

    ArrayAdapterからアイテムを削除します

  22. 22

    フラグメントからアクティビティを開始する

  23. 23

    フラグメントからアクティビティを開始する

  24. 24

    ADBシェルから共有アクティビティを開始する

  25. 25

    アクティビティからフラグメントを開始する

  26. 26

    NavigationViewから新しいアクティビティを開始する

  27. 27

    NavigationViewから新しいアクティビティを開始する

  28. 28

    クラスを持つArrayAdapter

  29. 29

    PublishResult内のConcurrentModificationException-ArrayAdapter

ホットタグ

アーカイブ