私の問題はAsyncTaskでデータを生成できるが、データをonCreateViewに戻すことができないことです。これは断片への私の最初の潜水です。申し訳ありませんが、私のコードが醜い場合は、これを動作させようとしているだけでなく、Androidのプログラミングには全く新しいので、もし私がどこかでばかげたミスを犯したら、すみません。グローバル変数を投稿する必要があるかどうかはわかりません。私の変数のいくつかは変な名前であることが分かっています。AsynctaskのデータはRecyclerViewのonCreateViewに継承されません
onCreateView部分
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news,
container, false);
pb = (ProgressBar) getActivity().findViewById(R.id.progressBar2);
gv = (RecyclerView) view.findViewById(R.id.expandableListView);
swp = (SwipeRefreshLayout) getActivity().findViewById(R.id.activity_main_swipe_refresh_layout);
gv.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
gv.setLayoutManager(layoutManager);
swp.setEnabled(false);
hadapter = new NewsExpandableAdapter(getActivity(), m_hparts);
System.out.println(m_hparts.size());
gv.setAdapter(hadapter);
return view;
}
RecyclerViewアダプタ
public class NewsExpandableAdapter extends RecyclerView.Adapter<NewsExpandableAdapter.ViewHolder> {
private Context context;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView nameTextView;
public ImageView messageButton;
public ViewHolder(View itemView) {
super(itemView);
nameTextView = (TextView) itemView.findViewById(R.id.title);
messageButton = (ImageView) itemView.findViewById(R.id.image);
}
}
private ArrayList<Model> mContacts;
public NewsExpandableAdapter(Context c, ArrayList<Model> contacts) {
this.context = c;
mContacts = (ArrayList<Model>) contacts;
}
@Override
public NewsExpandableAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View contactView = inflater.inflate(R.layout.expandable_list_item, parent, false);
ViewHolder viewHolder = new ViewHolder(contactView);
return viewHolder;
}
@Override
public void onBindViewHolder(NewsExpandableAdapter.ViewHolder viewHolder, int position) {
Model contact = mContacts.get(position);
TextView textView = viewHolder.nameTextView;
textView.setText(contact.getTitle());
ImageView image= viewHolder.messageButton;
Picasso.with(viewHolder.itemView.getContext())
.load(contact.getLink())
.into(image);
}
@Override
public int getItemCount() {
return mContacts.size();
}
}
フラグメントXML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.sample">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="100dp"
android:id="@+id/expandableListView">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
RecyclerViewのXML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/image"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/title"/>
</LinearLayout>
AsyncTask
public class Directory extends AsyncTask<Void, Void, String> {
String desc;
@Override
protected String doInBackground(Void... params) {
try {
Document document = Jsoup.connect(url + dateFormatYear.format(date)).get();
listing_latest = document.select(".title.page_title");
for (Element listing0 : listing_latest) {
Element hmonth = listing0.select("h3").first();
if(hmonth.text().equals(dateFormatMonth.format(date))){
month = hmonth.text();
hname = hmonth.parent().parent().parent().nextElementSibling();
releaseList = hname.select(".base_header.tc.m6");
for(Element block : releaseList){
name = block.select(".one_line.fs11 a").first();
image = block.select(".base_inner.h244.loading a img").first();
if(name != null){
hn = name.attr("title");
}
if(image != null){
hi = image.attr("abs:src");
}
m_hparts.add(new Model(hi));
}
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
hadapter.notifyDataSetChanged();
m_hparts.add(new Model(hi));
}
}
編集:私はまだonCreate()
でnew Directory().execute();
を入れてデータを取得できませんでした。
、と私は 'onPostExecute' – Asker
に編集を追加しました:あなたはこのような何かを行うことができ
アクティビティのフラグメント内のオブジェクト: "pb"と "swp"。フラグメントは、他のアクティビティで再利用できます。必要な場合は、それらのオブジェクトが必要な場所でgetActivity()を呼び出します。場合によっては、getActivityがnullを返すことがあることに注意してください(フラグメントがアクティビティから分離されている場合)。または、onAttach(アクティビティアクティビティ)でpbとswpに書き込み、onDetach()でnullに設定することもできます。 – babay