简体   繁体   English

在setAdapter上,它不调用Adapter的getView方法

[英]On setAdapter it does not invoke getView method of Adapter

The problem is getView method does not get called even when I do setAdapter on listView. 问题是,即使在listView上执行setAdapter时,也不会调用getView方法。 Please see may code below. 请参阅下面的可能代码。 I dont get any error message. 我没有收到任何错误消息。 It just does not display reviewer data. 它只是不显示审阅者数据。 Would you please suggest what I am doing incorrect. 您能建议我做错了吗?

MovieReviewerFragmemt class I have below code: MovieReviewerFragmemt类,我有以下代码:

    @Override
    protected void onPostExecute (ArrayList movieDetailsArray){
        getMovieArrayList(movieDetailsArray);
        ListView listView = (ListView)                                    rootView.findViewById(R.id.movie_detail_reviewerlist);
        MovieAddlDetail detail = (MovieAddlDetail) movieDetailsArray.get(0);
        MovieReviewers[] list = detail.getReviewerArrayList();
        Log.v(LOG_TAG, "MovieReviewerFragment - CustomReviewerAdapter - calling adapter");
        movieDetailAdapter = new CustomReviewerAdapter(getActivity(), list);
        movieDetailAdapter.notifyDataSetChanged();
        listView.setAdapter(movieDetailAdapter);
    }

CustomerReviewAdapter: CustomerReviewAdapter:

public class CustomReviewerAdapter extends ArrayAdapter {
private Context context;
private LayoutInflater inflater;
private final String LOG_TAG1 = CustomReviewerAdapter.class.getSimpleName();
private MovieReviewers[] reviewers;

public CustomReviewerAdapter(Context context, MovieReviewers[] reviewers) {
    super(context, R.layout.fragment_detail, reviewers);
    Log.v(LOG_TAG1, "CustomReviewerAdapter - constructor");
    this.context = context;
    this.reviewers = reviewers;

    inflater = LayoutInflater.from(context);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Log.v(LOG_TAG1, "CustomReviewerAdapter - getView");
    if (convertView == null) {
        inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.fragment_detail_reviewer, parent, false);
        Log.v(LOG_TAG1, "CustomReviewerAdapter - getView - convertview was null");

    }
    TextView textView1 = (TextView) convertView.findViewById(R.id.movie_detail_reviewerlist_author);
    TextView textView2 = (TextView) convertView.findViewById(R.id.movie_detail_reviewerlist_content);
    textView1.setText(reviewers[position].getAuthor());
    textView2.setText(reviewers[position].getContent());
    Log.v(LOG_TAG1, "CustomReviewerAdapter - getView - data set");
    return convertView;
}

} }

Fragment Detail Reviewer: 片段详细审阅者:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id ="@+id/imageView_layout"
android:orientation = "vertical">

<TextView
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:id="@+id/movie_detail_reviewerlist_author"
    android:textAlignment="center"
    android:textStyle="bold"
    android:gravity="center_vertical"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:descendantFocusability="blocksDescendants"/>

<TextView
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:id="@+id/movie_detail_reviewerlist_content"
    android:textAlignment="center"
    android:textStyle="bold"
    android:gravity="center_vertical"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:descendantFocusability="blocksDescendants"/>

Fragment Detail: 片段详细信息:

<?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">

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/movie_detail_list"
    android:editable="false" />

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/movie_detail_reviewerlist"
    android:editable="false" />

Below is activity from which fragment is being initiated. 下面是从中启动片段的活动。 The first fragment is working fine and is being displayed. 第一个片段运行正常并正在显示。 However the second fragment is where I dont get anything displayed. 但是第二个片段是我什么都没显示的地方。 Is below correct way to initiate two fragments? 以下是启动两个片段的正确方法吗?

Detail Activity: 详细活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    Bundle extras = getIntent().getExtras();
    intentData = extras.getStringArray("moviedetails");
    MovieDetailFragment movieDetailFragment = new MovieDetailFragment();
    movieDetailFragment.setMovieDetails(intentData);
    MovieReviewerFragment movieReviewerFragment = new MovieReviewerFragment();
    movieReviewerFragment.setMovieDetails(intentData);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container_1, movieDetailFragment)
                .add(R.id.container_2, movieReviewerFragment)
                .commit();
    }
}

您必须像这样调用LayoutInflater:

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

You have to switch the lines 你必须换行

movieDetailAdapter.notifyDataSetChanged();
listView.setAdapter(movieDetailAdapter);

To

listView.setAdapter(movieDetailAdapter);
movieDetailAdapter.notifyDataSetChanged();

First you set the adapter, then you send the notification. 首先,设置适配器,然后发送通知。 If you do this the reverse way, there is no ListView which may display the updated data. 如果以相反的方式执行此操作,则没有ListView可能显示更新的数据。

You can automate these notifications with 您可以使用以下方式自动执行这些通知

movieDetailAdapter.setNotifyOnChange(true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ListView适配器的方法getView()在一组setAdapter之后为一项加载多次数据 - ListView adapter's method getView() loads data multiple times for one item after one setAdapter 遇到错误 Attempt to invoke virtual method &#39;RecyclerView.setAdapter(RecyclerView$Adapter)&#39; on a null object reference in Android Studio - Encountered the error Attempt to invoke virtual method 'RecyclerView.setAdapter(RecyclerView$Adapter)' on a null object reference in Android Studio 在带有gridview的自定义适配器中未调用getView()方法 - getView() method is not called in custom adapter with gridview 未调用自定义适配器中的 getView-method - getView-method in customized Adapter is not called inflater.inflate在Adapter getview方法中给出nullpointer。为什么? - inflater.inflate gives nullpointer in Adapter getview method. Why? ANDROID适配器-getView方法处的NullPointerException(行:textView.setText()) - ANDROID adapter - NullPointerException at getView method (line : textView.setText()) 在重写用于列表视图的自定义适配器的getview方法之后,在列表视图中什么也看不到 - after override getview method for custom adapter for a listview,see nothing in listview 如何从另一个WebService Bean调用Android baseAdapter中的getView方法? - How to invoke the getView method in the baseAdapter in Android from another WebService Bean? 在Fragment中使用ListView时,适配器不调用getView() - The adapter does not call getView () when using ListView in Fragment Java.lang.NullpointerException尝试调用虚拟方法void android.widget.ListView.setAdapter(android.widget.setAdapter) - Java.lang.NullpointerException Attempt to invoke virtual method void android.widget.ListView.setAdapter(android.widget.setAdapter)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM