2017-11-01 1 views
2

ListView "resultList"가 있지만 항목을 클릭해도 새로운 (세부적인) 액티비티가 열리지 않습니다. 내 실수는 뭐니? 감사합니다.ListView 항목을 클릭하여 새 액티비티가 열리지 않음

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    this.resultList = (ListView) findViewById(R.id.resultList) ; 
    this.dataSource = MyExpenseOpenHandler.getInstance(this).readAllExpenses(); 
    this.adapter = new ExpenseOverviewAdapter(this, dataSource); 
    this.resultList.setAdapter(adapter); 
    this.resultList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(final AdapterView<?> adapterView, View view, final int i, final long l) { 
      Object element = adapterView.getAdapter().getItem(i); 

      if (element instanceof Expense) { 
       Expense expense = (Expense) element; 
       Intent intent = new Intent(MainActivity.this, ExpenseDetailActivity.class); 
       intent.putExtra(ExpenseDetailActivity.EXPENSE_KEY, expense); 
       startActivity(intent); 
      } 

      Log.e("Click on List: ", element.toString()); 
     } 
    }); 
} 
+1

'Log ("Click on List :", element.toString());를'if (element instanceof Expense) '블록에 넣고 실행 중인지 확인할 수 있습니까? – Vinnie

+0

간단히'if (element instanceof Expense)'가'false'입니다. –

+0

@Jochen Scheele DataSource의 유형은 무엇입니까? 귀하의 문제는 요소가 비용의 인스턴스가 아니기 때문에 startActivity 코드가 단순히 실행되지 않는다고 생각합니다. –

답변

0

코드는 확실히 .I이 문제가 귀하의 경우 조건이 거짓과 코드 내부를 반환 할 수 있다는 생각 보인다 문은 문이 있는지 확인하는 경우 executed.You은 내부에 로그 메시지를 넣을 수없는 경우 코드가 실행 중입니다. 당신이 당신의 안드로이드 모니터에서 로그 메시지가 표시되면

if (element instanceof Expense) { 
       Log.d(YOUR_LOG_TAG,"The if condition not executed") 
       Expense expense = (Expense) element; 
       Intent intent = new Intent(MainActivity.this, ExpenseDetailActivity.class); 
       intent.putExtra(ExpenseDetailActivity.EXPENSE_KEY, expense); 
       startActivity(intent); 
      } 

당신이 확신 할 수있는 내부 코드 당신의 상태가 실행되지 않고, 따라서 당신의 활동이 시작되지 않은 경우.

+0

if-clause (비용 지출 = (비용) 요소) 앞에 캐스팅을 썼습니다. 그런 다음 새 창이 열리고 있습니다. 그러나, 나는 아직도 이해가 안되는 이유는 (Object 요소 = adapterView.getAdapter(). getItem (i);) 내가 원하는 Expense 인스턴스가 아니다 ... 도움을 주셔서 감사합니다! –

0

당신은 수업료 비용으로을 구현 했습니까? 이

public class Expense implements Parcelable{ 
    private String id; 
    private String name; 
    private String grade; 

    // Constructor 
    public Expense(String id, String name, String grade){ 
     this.id = id; 
     this.name = name; 
     this.grade = grade; 
    } 
    // Getter and setter methods 
    ......... 
    ......... 

    // Parcelling part 
    public Expense(Parcel in){ 
     String[] data = new String[3]; 

     in.readStringArray(data); 
     // the order needs to be the same as in writeToParcel() method 
     this.id = data[0]; 
     this.name = data[1]; 
     this.grade = data[2]; 
    } 

    @Оverride 
    public int describeContents(){ 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeStringArray(new String[] {this.id, 
              this.name, 
              this.grade}); 
    } 
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
     public Expense createFromParcel(Parcel in) { 
      return new Expense(in); 
     } 

     public Expense[] newArray(int size) { 
      return new Expense[size]; 
     } 
    }; 

같은

뭔가}

0

목록보기 어떤 종류의, 아이 뷰는 버튼과 같은 초점이 잘 작동하지 클릭 항목으로 이어질 수 있습니다 얻을 경우. android:descendantFocusability="beforeDescendants"을 목록보기에 추가 할 수 있습니다.

+0

또는 android : clickable = "false"android : focuable = "false"자녀보기에서 추가 –

관련 문제