簡體   English   中英

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

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

問題是,即使在listView上執行setAdapter時,也不會調用getView方法。 請參閱下面的可能代碼。 我沒有收到任何錯誤消息。 它只是不顯示審閱者數據。 您能建議我做錯了嗎?

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:

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;
}

}

片段詳細審閱者:

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

片段詳細信息:

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

下面是從中啟動片段的活動。 第一個片段運行正常並正在顯示。 但是第二個片段是我什么都沒顯示的地方。 以下是啟動兩個片段的正確方法嗎?

詳細活動:

@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);

你必須換行

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

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

首先,設置適配器,然后發送通知。 如果以相反的方式執行此操作,則沒有ListView可能顯示更新的數據。

您可以使用以下方式自動執行這些通知

movieDetailAdapter.setNotifyOnChange(true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM