목록보기 항목을 선택하면 앱이 자동으로 닫힙니다.

존여

나는 안드로이드 프로그래밍의 초보자이며 코드에 무엇이 잘못되었는지 잘 모르겠습니다. 한 번 살펴보고 의견이나 수정 사항을 제안하십시오! 미리 감사드립니다!

ExerciseFragment :

public class ExerciseFragment<MainActivity> extends Fragment {
// Declare Variables
    JSONObject jsonobject;
    JSONArray jsonarray;
    ListView listview;
    ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    static String TITLE = "title";
    static String DIFFICULTY = "difficulty";
    static String CATEGORY = "category";
    static String IMAGE = "image";
    static String DESCRIPTION ="description";

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_exercise, container, false);
 // Execute DownloadJSON AsyncTask
        new DownloadJSON().execute(); 
        return rootView;    
    }// DownloadJSON AsyncTask

    public class DownloadJSON extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(getActivity());
        // Set progressdialog title
        mProgressDialog.setTitle("Exercise Tips!");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        // Show progress dialog
        mProgressDialog.show();
    }
    @Override
    protected Void doInBackground(Void... params) {
        // Create an array
        arraylist = new ArrayList<HashMap<String, String>>();
        // Retrieve JSON Objects from the given URL address
        jsonobject = JSONfunctions.getJSONfromURL("http://beta.json-generator.com/api/json/get/MZZHIfy");

        try {
            // Locate the array name in JSON
            jsonarray = jsonobject.getJSONArray("exercisecategory");

            for (int i = 0; i < jsonarray.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                jsonobject = jsonarray.getJSONObject(i);
                // Retrieve JSON Objects
                map.put("title", jsonobject.getString("title"));
                map.put("difficulty", jsonobject.getString("difficulty"));
                map.put("category", jsonobject.getString("category"));
                map.put("description", jsonobject.getString("description"));
                map.put("image", jsonobject.getString("image"));
                // Set the JSON Objects into the array
                arraylist.add(map);
            }
        } catch (JSONException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {
        // Locate the listview in fragment_exercise.xml
        listview = (ListView) getView().findViewById(R.id.listview);
        // Pass the results into ListViewAdapter.java
        adapter = new ListViewAdapter(getActivity().getApplicationContext(), arraylist);
        // Set the adapter to the ListView
        listview.setAdapter(adapter);
        // Close the progressdialog
        mProgressDialog.dismiss();
    }
}

ListViewAdapter :

@SuppressLint("ViewHolder")
public class ListViewAdapter extends BaseAdapter {
// Declare Variables
Context context;
LayoutInflater inflater;
ArrayList<HashMap<String, String>> data;
ImageLoader imageLoader;
HashMap<String, String> resultp = new HashMap<String, String>();

public ListViewAdapter (Context context, ArrayList<HashMap<String, String>> arraylist) {
    this.context = context;
    data = arraylist;
    imageLoader = new ImageLoader(context);
}

@Override
public int getCount() {
    return data.size();
}
@Override
public Object getItem(int position) {
    return null;
}
@Override
public long getItemId(int position) {
    return 0;
}
public View getView(final int position, View convertView, ViewGroup parent) {
    // Declare Variables
    TextView title;
    TextView difficulty;
    TextView category;
    TextView description;
    ImageView image;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = inflater.inflate(R.layout.exe_list, parent, false);
    // Get the position
    resultp = data.get(position);

    // Locate the TextViews in exe_list.xml
    title = (TextView) itemView.findViewById(R.id.title);
    difficulty = (TextView) itemView.findViewById(R.id.difficulty);
    category = (TextView) itemView.findViewById(R.id.category);
    description = (TextView) itemView.findViewById(R.id.description);

    // Locate the ImageView in exe_list.xml
    image = (ImageView) itemView.findViewById(R.id.image);

    // Capture position and set results to the TextViews
    title.setText(resultp.get(ExerciseFragment.TITLE));
    difficulty.setText(resultp.get(ExerciseFragment.DIFFICULTY));
    category.setText(resultp.get(ExerciseFragment.CATEGORY));
    description.setText(resultp.get(ExerciseFragment.DESCRIPTION));

    // Capture position and set results to the ImageView
    // Passes images URL into ImageLoader.class
    imageLoader.DisplayImage(resultp.get(ExerciseFragment.IMAGE), image);
    Log.e("TEST","message here1");

    // Capture ListView item click
    itemView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Log.e("TEST","message here2");
            // Get the position
            resultp = data.get(position);
            Intent intent = new Intent(context, SingleItemView.class);
            Log.e("TEST","message here3");
            // Pass all data title
            intent.putExtra("title", resultp.get(ExerciseFragment.TITLE));
            Log.e("TEST","message here4");
            // Pass all data difficulty
            intent.putExtra("difficulty", resultp.get(ExerciseFragment.DIFFICULTY));
            Log.e("TEST","message here5");
            // Pass all data category
            intent.putExtra("category",resultp.get(ExerciseFragment.CATEGORY));
            Log.e("TEST","message here6");
            // Pass all data description
            intent.putExtra("description", resultp.get(ExerciseFragment.DESCRIPTION));
            Log.e("TEST","message here7");
            // Pass all data image
            intent.putExtra("image", resultp.get(ExerciseFragment.IMAGE));
            Log.e("TEST","message here8");
            // Start SingleItemView Class
            context.startActivity(intent);

        }
    });
    return itemView;
}

SingleItemView :

public class SingleItemView extends Activity {
// Declare Variables
String title;
String difficulty;
String category;
String description;
String image;
String position;
ImageLoader imageLoader = new ImageLoader(this);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from exe_single.xml
    setContentView(R.layout.exe_single);

    Intent i = getIntent();
    // Get the result of title
    title = i.getStringExtra("title");
    // Get the result of difficulty
    difficulty = i.getStringExtra("difficulty");
    // Get the result of category
    category = i.getStringExtra("category");
    // Get the result of description
    description = i.getStringExtra("description");
    // Get the result of image
    image = i.getStringExtra("image");

    // Locate the TextViews in exe_single.xml
    TextView txttitle = (TextView) findViewById(R.id.title);
    TextView txtdifficulty = (TextView) findViewById(R.id.difficulty);
    TextView txtcategory = (TextView) findViewById(R.id.category);
    TextView txtdescription = (TextView) findViewById(R.id.description);

    // Locate the ImageView in exe_single.xml
    ImageView imgimage = (ImageView) findViewById(R.id.image);

    // Set results to the TextViews
    txttitle.setText(title);
    txtdifficulty.setText(difficulty);
    txtcategory.setText(category);
    txtdescription.setText(description);

    // Capture position and set results to the ImageView
    // Passes image images URL into ImageLoader.class
    imageLoader.DisplayImage(image, imgimage);
}

Logcat :

05-11 14:30:26.400: I/PGA(4771): Attempting to create new SOCKET connectionn pid = 4771, tid = 4771
05-11 14:30:26.410: I/PGA(4771): New SOCKET connection: com.fwong.eatright (pid 4771, tid 4771)
05-11 14:30:31.620: I/MemoryCache(4771): MemoryCache will use up to 48.0MB
05-11 14:30:31.640: D/dalvikvm(4771): GC_FOR_ALLOC freed 397K, 13% free 3511K/4004K, paused 10ms, total 10ms
05-11 14:30:31.650: E/TEST(4771): message here1
05-11 14:30:31.670: E/TEST(4771): message here1
05-11 14:30:31.680: E/TEST(4771): message here1
05-11 14:30:31.680: I/MemoryCache(4771): cache size=50784 length=1
05-11 14:30:31.820: I/MemoryCache(4771): cache size=108384 length=2
05-11 14:30:32.000: I/MemoryCache(4771): cache size=147104 length=3
05-11 14:30:33.580: E/TEST(4771): message here2
05-11 14:30:33.580: E/TEST(4771): message here3
05-11 14:30:33.580: E/TEST(4771): message here4
05-11 14:30:33.580: E/TEST(4771): message here5
05-11 14:30:33.580: E/TEST(4771): message here6
05-11 14:30:33.580: E/TEST(4771): message here7
05-11 14:30:33.580: E/TEST(4771): message here8
05-11 14:30:33.580: D/AndroidRuntime(4771): Shutting down VM
05-11 14:30:33.580: W/dalvikvm(4771): threadid=1: thread exiting with uncaught exception (group=0x55d4fb20)
05-11 14:30:33.580: I/Process(4771): Sending signal. PID: 4771 SIG: 9
05-11 14:30:33.580: D/AndroidRuntime(4771): procName from cmdline: com.fwong.eatright
05-11 14:30:33.580: E/AndroidRuntime(4771): in writeCrashedAppName, pkgName :com.fwong.eatright
05-11 14:30:33.580: D/AndroidRuntime(4771): file written successfully with content: com.fwong.eatright StringBuffer : ;com.fwong.eatright
05-11 14:30:33.580: E/AndroidRuntime(4771): FATAL EXCEPTION: main
05-11 14:30:33.580: E/AndroidRuntime(4771): Process: com.fwong.eatright, PID: 4771
05-11 14:30:33.580: E/AndroidRuntime(4771): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.app.ContextImpl.startActivity(ContextImpl.java:1034)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.app.ContextImpl.startActivity(ContextImpl.java:1021)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:311)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at com.fwong.eatright.exercise.ListViewAdapter$1.onClick(ListViewAdapter.java:107)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.view.View.performClick(View.java:4443)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.view.View$PerformClick.run(View.java:18442)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.os.Handler.handleCallback(Handler.java:733)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.os.Handler.dispatchMessage(Handler.java:95)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at android.os.Looper.loop(Looper.java:136)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at   android.app.ActivityThread.main(ActivityThread.java:5021)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at java.lang.reflect.Method.invokeNative(Native Method)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at java.lang.reflect.Method.invoke(Method.java:515)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
05-11 14:30:33.580: E/AndroidRuntime(4771):     at dalvik.system.NativeStart.main(Native Method)
팀 크레인

ApplicationContext를 사용하여 활동을 시작하고 있습니다. 이를 위해 ActivityContext를 사용해야합니다.

어댑터 변경을 초기화하는 연습 조각에서 :

adapter = new ListViewAdapter(getActivity().getApplicationContext(), arraylist);

에:

adapter = new ListViewAdapter(getActivity(), arraylist);

그래도 문제가 해결되지 않으면, 당신은 또한을 설정하려고 할 수 있습니다 OnItemClickListenerListView보다는 OnClickListenerItemView. 따라서 어댑터 OnClickListenergetView()방법 에서 설정 것을 제거하십시오 . 그러나 오히려 어댑터를 초기화하고이를 ListView또한 호출로 설정하고 ListView.setOnItemClickListener(new AdapterView.OnItemClickListener)거기에 기능을 붙여 넣습니다. 이 리스너는 목록 항목 선택 처리와 관련된 모범 사례로 사용됩니다.

위에서 설명한 방식 대신 원하는 방식으로 수행하면 View가로드 될 때마다 (ListView를 사용하고 있기 때문에 많은 시간이 소요됨) 애플리케이션이 OnClickListener를 설정하기 위해 메모리를 할당해야한다는 것입니다. 이제 한 번만 할당하면됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

목록보기 항목을 선택하고 새 페이지로 이동하려면 어떻게합니까?

분류에서Dev

긴 목록 선택기에서 항목이 삭제되면 앱이 닫힙니다.

분류에서Dev

목록보기 항목을 클릭하면 다른 활동을 여는 대신 앱이 충돌합니다.

분류에서Dev

목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

분류에서Dev

목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

분류에서Dev

드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

분류에서Dev

먼저 ExpansionTile의 항목 기본값이 열려 있습니다. 다른 항목을 클릭하면 현재 항목이 닫힙니다. 내가 어떻게 해?

분류에서Dev

목록보기 선택 항목을 설정하는 방법이 회전식보기에서 null입니다.

분류에서Dev

VSTS의 선택 목록 항목이 자동으로 정렬됩니다.

분류에서Dev

테이블의 값과 관련된 다중 선택 목록 상자에서 항목을 자동 선택하려면 어떻게해야합니까?

분류에서Dev

토스트를 시작하기 위해 버튼을 누르면 자바 앱이 닫힙니다. 그런데 왜?

분류에서Dev

AngularJS를 사용하여 선택한 태그 집합을 기반으로 항목 목록을 업데이트하려면 어떻게해야합니까?

분류에서Dev

클릭하고 Spinner 항목을 선택하면 커서가 빈 편집 텍스트로 자동으로 이동합니까?

분류에서Dev

두 개의 텍스트 상자가있는 항목 템플릿이있는 목록보기를 탭하여 다음 항목으로 이동합니다.

분류에서Dev

이전 조각으로 이동하려고 할 때 뒤로 버튼을 누르면 앱이 닫힙니다.

분류에서Dev

Android에서 목록보기 항목을 하나씩 자동으로 페이드 아웃하는 방법은 무엇입니까?

분류에서Dev

SwiftUI 목록에서 항목을 선택 취소하면 앱이 충돌합니다.

분류에서Dev

마지막 항목이 선택되면 반응 선택 메뉴를 자동으로 닫는 방법은 무엇입니까? (빈 목록)

분류에서Dev

Gingerbread에서 실행하면 ActiveAndroid 앱이 자동으로 닫힙니다.

분류에서Dev

목록보기에서 단일 항목을 선택하고 다른 활동에서 결과 행 이름을 표시하는 방법

분류에서Dev

이 활동을 열기 위해 버튼을 클릭하면 닫힙니다.

분류에서Dev

드롭 다운 목록 선택 항목을 컨트롤러로 보내기

분류에서Dev

목록보기에서 항목을 위아래로 이동하는 버튼이 있습니까?

분류에서Dev

Android 예제에서 클릭시 한 목록보기에서 다른 목록보기로 항목을 추가하는 방법이 필요합니다.

분류에서Dev

목록보기에서 선택한 두 번째 항목이 올바른 값을 표시하지 않습니다.

분류에서Dev

win32com Dispatch로 MATLAB을 시작하면 응용 프로그램이 자동으로 닫힙니다.

분류에서Dev

ListBox 항목을 선택하면 null이 반환됩니다.

분류에서Dev

wpf는 선택한 목록보기 항목에 바인딩하고 해당 선택에 따라 다른 목록을 업데이트합니다.

분류에서Dev

Selenium으로 자동 완성 목록 선택-다른 목록에 액세스하기 전에 하나의 목록을 닫아야합니다.

Related 관련 기사

  1. 1

    목록보기 항목을 선택하고 새 페이지로 이동하려면 어떻게합니까?

  2. 2

    긴 목록 선택기에서 항목이 삭제되면 앱이 닫힙니다.

  3. 3

    목록보기 항목을 클릭하면 다른 활동을 여는 대신 앱이 충돌합니다.

  4. 4

    목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

  5. 5

    목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

  6. 6

    드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

  7. 7

    먼저 ExpansionTile의 항목 기본값이 열려 있습니다. 다른 항목을 클릭하면 현재 항목이 닫힙니다. 내가 어떻게 해?

  8. 8

    목록보기 선택 항목을 설정하는 방법이 회전식보기에서 null입니다.

  9. 9

    VSTS의 선택 목록 항목이 자동으로 정렬됩니다.

  10. 10

    테이블의 값과 관련된 다중 선택 목록 상자에서 항목을 자동 선택하려면 어떻게해야합니까?

  11. 11

    토스트를 시작하기 위해 버튼을 누르면 자바 앱이 닫힙니다. 그런데 왜?

  12. 12

    AngularJS를 사용하여 선택한 태그 집합을 기반으로 항목 목록을 업데이트하려면 어떻게해야합니까?

  13. 13

    클릭하고 Spinner 항목을 선택하면 커서가 빈 편집 텍스트로 자동으로 이동합니까?

  14. 14

    두 개의 텍스트 상자가있는 항목 템플릿이있는 목록보기를 탭하여 다음 항목으로 이동합니다.

  15. 15

    이전 조각으로 이동하려고 할 때 뒤로 버튼을 누르면 앱이 닫힙니다.

  16. 16

    Android에서 목록보기 항목을 하나씩 자동으로 페이드 아웃하는 방법은 무엇입니까?

  17. 17

    SwiftUI 목록에서 항목을 선택 취소하면 앱이 충돌합니다.

  18. 18

    마지막 항목이 선택되면 반응 선택 메뉴를 자동으로 닫는 방법은 무엇입니까? (빈 목록)

  19. 19

    Gingerbread에서 실행하면 ActiveAndroid 앱이 자동으로 닫힙니다.

  20. 20

    목록보기에서 단일 항목을 선택하고 다른 활동에서 결과 행 이름을 표시하는 방법

  21. 21

    이 활동을 열기 위해 버튼을 클릭하면 닫힙니다.

  22. 22

    드롭 다운 목록 선택 항목을 컨트롤러로 보내기

  23. 23

    목록보기에서 항목을 위아래로 이동하는 버튼이 있습니까?

  24. 24

    Android 예제에서 클릭시 한 목록보기에서 다른 목록보기로 항목을 추가하는 방법이 필요합니다.

  25. 25

    목록보기에서 선택한 두 번째 항목이 올바른 값을 표시하지 않습니다.

  26. 26

    win32com Dispatch로 MATLAB을 시작하면 응용 프로그램이 자동으로 닫힙니다.

  27. 27

    ListBox 항목을 선택하면 null이 반환됩니다.

  28. 28

    wpf는 선택한 목록보기 항목에 바인딩하고 해당 선택에 따라 다른 목록을 업데이트합니다.

  29. 29

    Selenium으로 자동 완성 목록 선택-다른 목록에 액세스하기 전에 하나의 목록을 닫아야합니다.

뜨겁다태그

보관