2014-08-30 61 views
0

我試圖讓我的自定義listview片段上,但我只能通過一個活動來完成它。片段上的自定義ListView

這裏是我的代碼:

MyActivity: 

package com.teampainite.testreviews; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.RatingBar; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 


public class MyActivity extends Activity { 
private List<ReviewAdapter> Review = new ArrayList<ReviewAdapter>(); 


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

    populateReviews(); 
    populateReviewList(); 
} 

private void populateReviewList() { 
    Review.add(new ReviewAdapter("Okay", 4, "Levi", "This is an example")); 
} 

private void populateReviews() { 
    ArrayAdapter<ReviewAdapter> adapter = new ReviewList(); 
    ListView list = (ListView) findViewById(R.id.list); 
    list.setFastScrollEnabled(true); 
    list.setAdapter(adapter); 
} 

private class ReviewList extends ArrayAdapter<ReviewAdapter> { 
    public ReviewList() { 
     super(MyActivity.this, R.layout.review_layout, Review); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View ReviewView = convertView; 
     if(ReviewView == null){ 
      ReviewView = getLayoutInflater().inflate(R.layout.review_layout, parent, false); 
     } 

     //Find view 
     ReviewAdapter currentReview = Review.get(position); 

     TextView title = (TextView)ReviewView.findViewById(R.id.review_list_title); 
     RatingBar rating = (RatingBar)ReviewView.findViewById(R.id.review_rating); 
     TextView user = (TextView)ReviewView.findViewById(R.id.review_user); 
     TextView review = (TextView)ReviewView.findViewById(R.id.review_content); 

     title.setText(currentReview.getTitle()); 
     rating.setRating(currentReview.getRating()); 
     user.setText(currentReview.getUser()); 
     review.setText(currentReview.getReview()); 

     rating.setEnabled(false); 

     return ReviewView; 
    } 


} 
} 

ReviewAdapter: 

package com.teampainite.testreviews; 

public class ReviewAdapter { 
private String Title; 
private float Rating; 
private String User; 
private String Review; 


public ReviewAdapter(String Title, float Rating, String User, String Review){ 
    super(); 
    this.Title = Title; 
    this.Rating = Rating; 
    this.User = User; 
    this.Review = Review; 
} 

public String getTitle(){ 

    return Title; 
} 

public float getRating(){ 

    return Rating; 
} 

public String getUser(){ 

    return User; 
} 

public String getReview(){ 
    return Review; 
} 

} 

有人可以幫我把這個片段?我想使用基於xml的列表視圖,因爲主片段上還有其他元素。沒有其他問題解決這個問題,我已經能夠找到。

片段代碼:

package com.teampainite; 


import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.RatingBar; 
import android.widget.TextView; 

import com.teampainite.adapter.ReviewAdapter; 

import java.util.ArrayList; 
import java.util.List; 

public class RestarauntFragment extends Fragment { 
private List<ReviewAdapter> Review = new ArrayList<ReviewAdapter>(); 


public RestarauntFragment() { 
    // Required empty public constructor 
} 

LayoutInflater inflater; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    setHasOptionsMenu(true);// Inflate the layout for this fragment 

    return inflater.inflate(R.layout.fragment_restaraunt, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    ArrayAdapter<ReviewAdapter> adapter = new ArrayAdapter(getActivity(), R.layout.review_list_item, Review); 
    ListView list = (ListView)view.findViewById(R.id.reviews_list); 
    list.setAdapter(adapter); 

    final ImageView favorite = (ImageView) view.findViewById(R.id.favorite); 
    favorite.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      favorite.setImageDrawable(getActivity().getResources().getDrawable(R.drawable.ic_action_favorite_full)); 
     } 
    }); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.restaraunt, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      showStoreListings(); 
      break; 
     case R.id.show_menu: 
      showMenu(); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private void showStoreListings() { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.hide(RestarauntFragment.this); 
    transaction.replace(android.R.id.widget_frame, new HomeFragment()).commit(); 
} 

private void showMenu() { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.hide(RestarauntFragment.this); 
    transaction.replace(android.R.id.widget_frame, new MenuFragment()).commit(); 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
    getActivity().setTitle("Applebees"); 
    populateReviewList(); 
} 

private void populateReviewList() { 
    Review.add(new ReviewAdapter("Okay", 1, "Levi", "This is an example") 
} 

private class ReviewList extends ArrayAdapter<ReviewAdapter> { 
    public ReviewList() { 
     super(getActivity(), R.layout.review_list_item, Review); 
    } 
    public View getView(LayoutInflater inflater, int position, View convertView, ViewGroup parent) { 
     View ReviewView = convertView; 
     if (ReviewView == null) { 
      ReviewView = inflater.inflate(R.layout.review_list_item, parent, false); 
     } 

     //Find view 
     ReviewAdapter currentReview = Review.get(position); 

     TextView title = (TextView) ReviewView.findViewById(R.id.review_list_title); 
     RatingBar rating = (RatingBar) ReviewView.findViewById(R.id.review_rating); 
     TextView user = (TextView) ReviewView.findViewById(R.id.review_user); 
     TextView review = (TextView) ReviewView.findViewById(R.id.review_content); 

     title.setText(currentReview.getTitle()); 
     rating.setRating(currentReview.getRating()); 
     user.setText(currentReview.getUser()); 
     review.setText(currentReview.getReview()); 

     rating.setEnabled(false); 

     return ReviewView; 
    } 
} 
} 

有沒有錯誤,但是當我啓動我得到這個:

 08-29 23:15:20.876 27575-27575/com.teampainite.you_r_next E/ArrayAdapter﹕ You must supply a resource ID for a TextView 
08-29 23:15:20.876 27575-27575/com.teampainite.you_r_next D/AndroidRuntime﹕ Shutting down VM 
08-29 23:15:20.876 27575-27575/com.teampainite.you_r_next W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41615930) 
08-29 23:15:21.507 27575-27575/com.teampainite.you_r_next E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
      at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
      at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
      at android.widget.AbsListView.obtainView(AbsListView.java:2159) 
      at android.widget.ListView.onMeasure(ListView.java:1130) 
      at android.view.View.measure(View.java:15513) 
      at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 
      at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 
      at android.view.View.measure(View.java:15513) 
      at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1217) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
      at android.widget.ScrollView.onMeasure(ScrollView.java:321) 
      at android.view.View.measure(View.java:15513) 
      at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 
      at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 
      at android.view.View.measure(View.java:15513) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
      at android.view.View.measure(View.java:15513) 
      at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:762) 
      at android.view.View.measure(View.java:15513) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
      at android.view.View.measure(View.java:15513) 
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
      at android.view.View.measure(View.java:15513) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 
      at android.view.View.measure(View.java:15513) 
      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 
      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 
      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
      at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
      at android.view.Choreographer.doFrame(Choreographer.java:532) 
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
      at android.os.Handler.handleCallback(Handler.java:725) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5191) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView 
      at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379) 
            at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
            at android.widget.AbsListView.obtainView(AbsListView.java:2159) 
            at android.widget.ListView.onMeasure(ListView.java:1130) 
            at android.view.View.measure(View.java:15513) 
            at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 
            at android.view.View.measure(View.java:15513) 
            at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1217) 
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
            at android.widget.ScrollView.onMeasure(ScrollView.java:321) 
            at android.view.View.measure(View.java:15513) 
            at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 
            at android.view.View.measure(View.java:15513) 
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
            at android.view.View.measure(View.java:15513) 
            at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:762) 
            at android.view.View.measure(View.java:15513) 
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
            at android.view.View.measure(View.java:15513) 
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) 
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
            at android.view.View.measure(View.java:15513) 
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 
            at android.view.View.measure(View.java:15513) 
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
            at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
            at android.view.Choreographer.doFrame(Choreographer.java:532) 
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
            at android.os.Handler.handleCallback(Handler.java:725) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5191) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

在片段你要調用你的onCreateView()方法 – Piyush 2014-08-30 04:07:14

+0

我知道ŧ帽子,但它仍然不起作用。給我幾分鐘,我可以發佈我的嘗試,讓它到一個片段 – 2014-08-30 04:08:10

+0

我不明白你想從你的片段訪問列表視圖? – mmlooloo 2014-08-30 04:08:57

回答

0

沒有其他的問題已經解決了這一點,我已經能夠找到。

請檢查該Android ListView in fragment exampleCreate listview in fragment android 例子。

有很多的例子,如果你寫在谷歌

檢查這個「用列表視圖片段」: https://www.google.co.in/?gfe_rd=cr&ei=uU0BVJzYIsHN8geZ8IBI&gws_rd=ssl#q=fragment+with+list+views

+0

第一個鏈接僅顯示擴展Activity的類,而不是片段,而對於第二個鏈接,它們只顯示鏈接到listfragments,並且我需要一個標準片段。 – 2014-08-30 04:19:07

+0

你檢查了這一個http://www.easyinfogeek.com/2013/07/full-example-of-using-fragment-in.html – Nitin 2014-08-30 04:22:39

+0

@LeviSnyder已解決你的問題 – Nitin 2014-09-02 04:18:22

0

嘗試在onViewCreated()到onActivityCreated()移動你的代碼;

0

從logcat的很清楚,你是會犯錯內getView()適配器(即ReviewList)的方法你提到3 TextView的內getView ......正確地檢查你的佈局文件的一個視圖必須的RelativeLayout ...這就是爲什麼你得到ClassCastException異常

+0

我放什麼,我放什麼? D: – 2014-08-30 07:53:05

+0

@Levi ...你還在聽錯嗎? – 2014-08-31 17:13:31