Java 片段上的自定义ListView
我试图在一个片段上获取我的自定义listview,但我只能通过一个活动来完成它 这是我的密码:Java 片段上的自定义ListView,java,android,android-fragments,android-listview,Java,Android,Android Fragments,Android 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;
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;
}
}
没有其他问题能够解决这个问题,我已经找到了。 请检查这个 及 例如 如果你在谷歌上写“带列表视图的片段”,有很多例子 选中此项:
从logcat可以清楚地看出,您在适配器的getView()方法中犯了错误(即ReviewList)您在getView中提到了3 TextView…请正确检查布局文件,其中一个视图必须是RelativeLayout…这就是为什么您在片段中获得ClassCastException您必须在onCreateView()中调用方法的原因。我知道,但它仍然不起作用。给我几分钟的时间,我可以将我的尝试发布到碎片上。我不明白你想从你的碎片访问listview吗?我添加了我的碎片尝试。另外,是的,我想查看片段上的listview,我已经有了其他的listview,它们显示得很好,但是我无法获得自定义listview来显示。你知道
片段
和活动
的区别吗?在这里你发布活动。你想让我们调试一下吗?是的?这都是你的问题吗?第一个链接只显示扩展活动的类,而不是片段,至于第二个链接,它们只显示到listfragments的链接,我需要一个标准片段。你检查过这一个了吗?我放什么,我放什么?D:
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)