2013-11-26 3 views
1

나는 간단한 listview 응용 프로그램을 개발했으며 listview를 표시했지만 하나의 listview를 선택하면 오류가 발생합니다.java.lang.ClassCastException : android.widget.RelativeLayout

이것은 하나의 목록 항목 xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<TextView android:id="@+id/product_label" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="25dip" 
     android:textStyle="bold" 
     android:padding="10dip" 
     android:textColor="#ffffff"/> 
</LinearLayout> 

import java.util.List; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.widget.Toast; 
import android.content.Intent; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 

import android.widget.ListView; 
import android.widget.TextView; 

public class MainActivity extends ListActivity implements FetchDataListener{ 
private ProgressDialog dialog; 

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

    ListView lv = getListView(); 

    // listening to single list item on click 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

      // selected item 
      String product = ((TextView) view).getText().toString(); 

      // Launching new Activity on selecting single List Item 
      Intent i = new Intent(getApplicationContext(), SingleListItem.class); 
      // sending data to new activity 
      i.putExtra("product", product); 
      startActivity(i); 

     } 
    }); 

} 

private void initView() { 
    // show progress dialog 
    dialog = ProgressDialog.show(this, "", "Loading..."); 

    String url = "http://pubbapp.comze.com/pubapp.php"; 
    FetchDataTask task = new FetchDataTask(this); 
    task.execute(url); 
} 

@Override 
public void onFetchComplete(List<Application> data) { 
    // dismiss the progress dialog 
    if(dialog != null) dialog.dismiss(); 
    // create new adapter 
    ApplicationAdapter adapter = new ApplicationAdapter(this, data); 
    // set the adapter to list 
    setListAdapter(adapter);   
} 

@Override 
public void onFetchFailure(String msg) { 
    // dismiss the progress dialog 
    if(dialog != null) dialog.dismiss(); 
    // show failure message 
    Toast.makeText(this, msg, Toast.LENGTH_LONG).show();   
} 
} 

이 내 두 번째 화면 자바 파일,

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.TextView; 

public class SingleListItem extends Activity{ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.single_list_item_view); 

    TextView txtProduct = (TextView) findViewById(R.id.product_label); 

    Intent i = getIntent(); 
    // getting attached intent data 
    String product = i.getStringExtra("product"); 
    // displaying selected product name 
    txtProduct.setText(product); 

} 
} 

내가 도와이 error.plz를 해결하는 방법에 대한 아무 생각이 내 MainActivity.java 파일입니다 이 문제를 해결할 수 있습니다.

+0

당신이 내 대답 -------- 당신이 의도에 MainActivity.this를 전달할 수도의 의도 .instead에 getApplicationContext()를 통과 할 필요 없음을 확인 – SathishKumar

+0

'ApplicationAdapter'과 함께하는 것. 의도 i = 새로운 의도 (MainActivity.this, SingleListItem.class); –

답변

10

당신은 점점 같이

java.lang.ClassCastException: android.widget.RelativeLayout 

여기에 이유는 당신이 텍스트 뷰에 ListView에 선택된 행보기 (RelativeLayout의)를 전송하려는

 String product = ((TextView) view).getText().toString(); 

. 당신은 당신이 할 수있는을 ListItem에 대한 사용자 정의 XML 파일을 사용하는 경우

// selected item 
      String product = ((TextView) view).getText().toString(); 

TextView txtview= (TextView) view.findViewById(R.id.product_label); 
String product = txtview.getText().toString(); 
+0

위의 코드가 u로 변경되었습니다.하지만 다른 오류가 있습니다. – user2881604

+0

이것은 내 오류입니다. 11-26 15 : 48 : 14.860 : E/AndroidRuntime (5570) : 치명적인 예외 : 주 11-26 15 : 48 : 14.860 : E/AndroidRuntime (5570) : java.lang.NullPointerException 11-26 15:48 : 14.860 : E/AndroidRuntime (5570) : \t at com.sj.jsondemo.MainActivity $ 1.onItemClick (MainActivity.java:35) 11-26 15 : 48 : 14.860 : E/AndroidRuntime (5570) : \t android.widget .AdapterView.performItemClick (AdapterView.java:284) 11-26 15 : 48 : 14.860 : E/AndroidRuntime (5570) : \t android.widget.ListView.performItemClick (ListView.java:3745) – user2881604

+0

@ user2881604 : 문제의 코드를 업데이트하고 더 많은 도움을 받으려면 질문이있는 로그를 첨부하십시오. –

0

프로젝트를 마우스 오른쪽 단추로 클릭하고 목록에서 속성을 선택하십시오. java 빌드 경로로 이동 Gen 폴더를 위로 이동하고 src 폴더를 아래로 이동합니다. 프로젝트를 청소하고 실행하십시오. 저에게 말하지 않으면 저에게 효과적입니까?

5

변경 : 선택한 행 레이아웃에서 텍스트 뷰에 액세스하려면 다음과 같이 그것을 할 xml 파일에 작성한 텍스트 뷰 ID를 사용하십시오.이 행을 주석 처리 된 행으로 바꾸십시오.

// String product = ((TextView) view).getText().toString(); 
TextView txtview= (TextView) view.findViewById(R.id.your_textview_id); 
String product = txtview.getText().toString(); 

그리고 어댑터에서 android.R.layout.simple_list_item_1을 사용하는 경우 코드에 android.R.id.text1 리소스 ID를 설정해야합니다. 이 경우와 동일

// String product = ((TextView) view).getText().toString(); 
TextView txtview= (TextView) view.findViewById(android.R.id.text1); 
String product = txtview.getText().toString(); 

예 :

// listening to single list item on click 
lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     // selected item------------->replace below line with this 
     // String product = ((TextView) view).getText().toString(); 
     TextView txtview= (TextView) view.findViewById(R.id.your_textview_id); 
     String product = txtview.getText().toString(); 



     // Launching new Activity on selecting single List Item 
     Intent i = new Intent(MainActivity.this, SingleListItem.class); 
     // sending data to new activity 
     i.putExtra("product", product); 
     startActivity(i); 

    } 
}); 
0

으로

TextView txtview = ((TextView) view.findViewById(R.id.your_textview_id)); 
    String product = txtview.getText().toString(); 
+0

getApplicationContext()를 의도적으로 전달할 필요가 없습니다.이 경우 MainActivity.this를 전달할 수 있습니다. 의지. 의도 i = 새로운 의도 (MainActivity.this, SingleListItem.class); –

관련 문제