タイトルに記載されているようです。OnItemClickListenerをフラグメントで使用しようとしましたが、ListFragmentは拡張されませんが、リスナーは応答しないようです。CustomAdapterを使用したFragmentのOnItemClickListenerが機能しません
それは動作しませんどのように: 私は、カスタムのListViewItemとリストビューを含むフラグメントを作成し、コンテンツがPHPファイルに接続ダウンローダーと呼ばれるクラスと与えられたJSONの結果を翻訳パーサと呼ばれるクラスでMySQLのテーブルからダウンロードされます文字列に変換する。結果を受け取り、カスタムListViewItemのTextViewsをParserの結果で変更するCustomAdapterがあります。
ListViewは問題なく作成され、コンテンツが表示されます。 フラグメントコード:フラグメントの
public class BiologyFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
String url = "URL FOR PHP - just cut that out :D";
private SwipeRefreshLayout ll;
private ListView lv;
private boolean isRefreshing;
private Handler refreshhandler = new Handler();
public BiologyFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
ll = (SwipeRefreshLayout)inflater.inflate(R.layout.fragment_biology, container, false);
//set up listener for pull to refresh
ll.setOnRefreshListener(this);
//Listview for the to be populated
lv = (ListView) ll.findViewById(R.id.lv);
//download on opening
new Downloader(getContext(), url, lv).execute();
//PROBLEM HERE !
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getContext(), "CLICKED " + position, Toast.LENGTH_SHORT).show();
}
});
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
boolean enable = false;
if (lv != null && lv.getChildCount() > 0) {
// check if the first item of the list is visible
boolean firstItemVisible = lv.getFirstVisiblePosition() == 0;
// check if the top of the first item is visible
boolean topOfFirstItemVisible = lv.getChildAt(0).getTop() == 0;
// enabling or disabling the refresh layout
enable = firstItemVisible && topOfFirstItemVisible;
}
ll.setEnabled(enable);
}
});
return ll;
}
@Override
public void onRefresh() {
new Downloader(getContext(), url, lv).execute();
refreshhandler.post(refreshing);
}
Runnable refreshing = new Runnable() {
@Override
public void run() {
if(isRefreshing){
// re run the verification after 1 second
}else{
// stop the animation after the data is fully loaded
ll.setRefreshing(false);
}
}
};
}
XML:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/lv"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="false"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_menu_slideshow" />
</FrameLayout>
あなただけのListViewItemのXMLまたはCustomAdapter、ダウンローダーやパーサクラスが必要な場合私に知らせて、私はここにそれを掲示します、これらが問題を解決するために必要であるかどうか私は確信していません。
ご協力いただきありがとうございます。
これは動作していないようです。 "必要なandroid.support.v4.widget.SwipeRefreshLayout が見つかりました。android.view.View" – ProgFroz
@JustinN私のコードを更新しましょう。 – Amir
あなたのコードはエラーなしで動作しますが、私はサークルを試しても何もせずにそこにいることを続けても、もうリフレッシュできません。また、それは私の問題をonItemClickListenerで解決しません:/ – ProgFroz