2014-08-30 4 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

+0

Я знаю, т но он все еще не работает. Дайте мне несколько минут, и я могу опубликовать свою попытку получить его на фрагмент –

+0

. Я не понимаю, что вы хотите получить доступ к списку из вашего фрагмента? – mmlooloo

ответ

0

Ни один другой вопрос не обратился к этому, что я смог найти ,

Пожалуйста, проверьте этот Android ListView in fragment example и Create listview in fragment android пример.

Есть много примеров, если вы пишете "фрагмент с видом списка" на Google

Установите этот флажок: https://www.google.co.in/?gfe_rd=cr&ei=uU0BVJzYIsHN8geZ8IBI&gws_rd=ssl#q=fragment+with+list+views

+0

Первая ссылка показывает только классы, расширяющие Activity, а не фрагмент, а для второй ссылки они показывают только ссылки на listfragments, и мне нужен стандартный фрагмент. –

+0

Вы проверили это http://www.easyinfogeek.com/2013/07/full-example-of-using-fragment-in.html – Nitin

+0

@LeviSnyder решила вашу проблему – Nitin

0

Попробуйте переместить код в onViewCreated() в onActivityCreated();

0

Из LogCat ясно, что вы делаете ошибку в GetView() метод адаптера (т.е. ReviewList) вы упомянули 3 TextView внутри GetView ... проверьте файл макета должным образом один из вид должен быть RelativeLayout ... Вот почему вы получаете ClassCastException

+0

Что я ставил, и что мне ставить? D: –

+0

@Levi ... вы все еще получаете ошибку? –