0

현재 목록보기가 있으며 목록보기를 다른 활동으로 보내려고합니다. 그래서 당신이 1-4 항목을 클릭하면 그 것에 해당하는 클래스를 얻을 수 있습니다. 내가 그것을 할 수 있다고 생각할 수있는 유일한 방법은 목록보기에서 항목의 텍스트를 잡고 그 이름의 활동을 시작하는 것입니다. 이를위한 코드는 다음과 같습니다.변수 인 Android에서 인 텐트 호출

final String chosen = ""; 
chosen = (String) ((TextView) view).getText(); 
Intent nextScreen = new Intent(getApplicationContext(), chosen.class); 

작동하지 않습니다. 마지막 줄에서 선택을 한 유형으로 해석 할 수 없다는 오류가 표시됩니다.

나는 ((TextView) view).getText() 작품

Log.d("Debug", "Test"+((TextView) view).getText()); 

때문에 것은 나에게 로그 캣에서 올바른 선택 항목을 제공 것을 알고있다.

아이디어가 있습니까? 미리 감사는

는 편집 :

나는이 내 코드를 변경 시도 :

String chosen = (String) ((TextView) view).getText(); 
try { 
    Intent nextScreen = new Intent(getApplicationContext(), Class.forName(chosen)); 
    startActivity(nextScreen); 
    Log.d("Debug", "Good"+((TextView) view).getText()); 
    } 
catch (ClassNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    Log.d("Debug", "Bad"+((TextView) view).getText()); 
    } 
    Log.d("Debug", "Final"+((TextView) view).getText()); 

로그 고양이가 나에게

BadItem1 
FinalItem1 

의 출력을 준 나는 것 같네요 누군가가 지적한 것처럼 잘못된 방식에 대해. 또한 OnItemClickListener을 사용해야한다고 생각합니다. 앞으로도 더 쉽게 도움을 얻을 수 있도록 노력하고 결과를 게시 할 것입니다.

+0

방금 ​​컨텍스트 – Blundell

답변

1

오류는 여기에 있습니다 :

당신이 최종 선정 선언한다 이후
final String chosen = ""; 
chosen = (String) ((TextView) view).getText(); 

, 당신은 한 번만 값을 할당 할 수 있습니다

final String chosen = (String) ((TextView) view).getText(); 

을 또한 당신이 가지고 활동을 시작한다고 가정 선택된 변수에 저장되는 이름. 이것을 위해 selected.class를 작성할 수 없습니다. 올바른 방법은 다음과 같습니다.

Class.forName(chosen); 

희망이 있습니다.

+0

가 당신을 도움이 그랬던 것처럼 온 활동을 사용하여 응용 프로그램 컨텍스트를 사용하지 마십시오 : 이것은 당신이 필요로하는 무엇인가? –

+0

와우 나는이 질문부터 너무 많이 배웠다. 하하. –

0

Intent 생성자는 ContextString이 필요합니다. Intent 생성자에 대한 호출에서 아마도 Class.forName(chosen)과 같은 것을 할 수 있습니다.

0

변수의 .class를 호출하면 변수 내용의 클래스가 아니라 해당 변수의 클래스를 가져옵니다.

ListView에서 OnItemClickListener을 사용하여 클릭 한 항목을 식별해야한다고 생각합니다. position 매개 변수 또는 getItemAtPosition(position) 호출은 목록보기에서 항목을 고유하게 식별하고 적절한 활동을 호출하기에 충분해야합니다. 여기

참조 문서 : http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

0

Factory을 확인합니다.

이렇게하면 사용자가 읽고있는 텍스트에 클래스 이름을 연결할 필요가 없습니다. 당신에게 더 많은 유연성/더 나은 사용자 경험/유지하기 쉬운 코드를 제공합니다. separation of concerns도 도와주세요.

class NavFactory { 
    private static final int CLASS_FIRST = 1;  

    public static Intent getNavIntent(Context context, String name){ 
     switch(getId(name)){ 
       case CLASS_FIRST: 
        return new Intent(context, FirstClass.class); 
       default: 
        return null; 
     } 
    } 

    private static int getId(String name){ 
     if("listItemOneText".equals(name) 
      return CLASS_FIRST; 

     return -1; 
    } 


} 

참고 : 귀하의 경우 Java Factory Pattern

:

String chosen = (String) ((TextView) view).getText(); 
Intent nextScreen = NavFactory.getNavIntent(this, chosen); 
0

당신은 새로운 가정 ActivityclassString을 보내고있다.

final String chosen = ""; 
chosen = ((TextView) view).getText(); 
Class<?> chosenActivity = Class.forName(chosen); 
Intent nextScreen = new Intent(this, chosenActivity);