2016-06-10 67 views
1

我試圖強制類型轉換數據,但是當我寫onItemClick下TextView clickData=(TextView) view(...)logcat的顯示信息:ClassCastException:android.widget.RelativeLayout不能轉換爲android.widget.TextView?

java.lang.ClassCastException:android.widget.RelativeLayout不能轉換爲android.widget .TextView

我不知道爲什麼。

這從主要活動屬於:

public class ListViewForAllContact extends AppCompatActivity { 
     ListView myListView; 
     protected void onCreate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.listviewforallcontact); 



      ContactDatabase onbOfContactDatabase=new ContactDatabase(getBaseContext()); 

      Cursor mCursor= onbOfContactDatabase.phoneName(); 

      String[] fromFileName=new String[]{ContactDatabase.NAME}; 
      int[] toViewId=new int[]{R.id.textView5}; 
      SimpleCursorAdapter simpleCursorAdapter; 

      simpleCursorAdapter=new SimpleCursorAdapter(this,R.layout.forreading,mCursor,fromFileName,toViewId,0); 
      myListView=(ListView)findViewById(R.id.listView); 
      myListView.setAdapter(simpleCursorAdapter); 

      myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        TextView clickData=(TextView) view;//becouse of this line error will come. 

        Toast.makeText(getBaseContext(), clickData.getText(), Toast.LENGTH_LONG).show(); 
       } 
      }); 

     } 
    } 

這是XML與ListView控件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/textView5" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true"/> 





</RelativeLayout> 

回答

1

該視圖要:與TextView的

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 


    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true"/> 
</RelativeLayout> 

這是第二個XML文件訪問您在第二個xml中顯示的RelativeLayout。如果你想訪問TextView,你必須在RelativeLayout上找到它。

代替該

的TextView clickData =(TextView的)視圖的;

嘗試這種

的TextView clickData =(TextView的)view.findViewById(R.id textView5。);

我認爲這樣可以解決你的問題

更新...

我的建議是使用適配器

公共類YourAdapter延伸BaseAdapter {

private ArrayList<Things> things; 
private Context context; 
private TextView yearTxtView; 
private TextView weekTxtView; 
private TextView extraTxtView; 


public YourAdapter(Context context, ArrayList<Things> things) { 
    this.things = things; 
    this.context = context; 
} 

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

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

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    convertView =  LayoutInflater.from(this.context).inflate(R.layout.ITEM_LAYOUT, parent, false); 

    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //do your code here 
     } 
    }); 

    return convertView; 


} 

}

和代碼,你有,只是這樣做

私人YourAdapter yourAdapter;

this.yourAdapter = new YourAdapter(getActivity(),YourArray);

myListView.setAdapter(this.yourAdapter);

+0

爲什麼view是RelativeLayout? –

+0

它的相對佈局,因爲那是圍繞着你的文本視圖的視圖,它沒有得到對文本視圖的點擊,它獲得了對該視圖/單元格的點擊而不是它內部的項目。 –

+0

好吧我更新我的答案,如果它很難理解說,但它是控制列表視圖和那裏項目的最佳方式。 –

相關問題