多くのフラグメントでアプリケーションを作成していますが、フラグメント内のListViewにアクセスしようとするとエラーが発生します。このコードをMainActivityでテストしたところ、正常に動作しました。ここでAndroid Studio:フラグメント内のListViewへのアクセス(2番目のレイアウトのパスエラー)
は、フラグメントのコードです:
public class Theme extends Fragment {
CustomAdapter adapter;
ListView lv;
FirebaseDatabase database;
DatabaseReference myRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.theme_layout, container, false);
database = FirebaseDatabase.getInstance();
myRef = database.getReference();
lv = (ListView) v.findViewById(R.id.list);
adapter = new CustomAdapter(getActivity(), getData());
lv.setAdapter(adapter);
return v;
}
private ArrayList getData() {
final ArrayList<Teemad> teemadelist = new ArrayList<>();
myRef.child("teemad").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for(DataSnapshot child: children){
Teemad teemad = child.getValue(Teemad.class);
teemadelist.add(teemad);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return teemadelist;
}
}
これは私のレイアウトファイルです:
<FrameLayout
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=".MainActivity"
android:id="@+id/container">
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@color/material_blue_grey_800"
android:dividerHeight="1dp"
android:footerDividersEnabled="false"
/>
</FrameLayout>
、これらは、メインのエラー(少なくとも私はそうと仮定)の2つです、それはスロー:
を03-23 01:14:50.296 9127-9127/com.example.richard.kodutoo_messenger W/View: requestLayout() improperly called by android.support.v7.widget.AppCompatTextView{2ffc0764 V.ED.... ......ID 16,123-227,180 #7f0d0087 app:id/bb_bottom_bar_title} during layout: running second layout pass
03-23 01:14:50.455 9127-9127/com.example.richard.kodutoo_messenger W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
私は非常に長いこの場所で立ち往生しているので、何らかの助けやフィードバックが便利になるでしょう時間。答えに追加情報が必要な場合は、喜んで提供します。
EDIT !!
私はフラグメントの代わりにListFragmentを使用しようとしましたが、onCreateViewの後に私はonActivityCreatedを使用しましたが、それはさらに悪化しました..少なくともアプリケーションを起動する前に、アプリケーションは起動するとすぐにクラッシュします。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.theme_layout, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
database = FirebaseDatabase.getInstance();
myRef = database.getReference();
lv = (ListView) getListView().findViewById(R.id.list);
adapter = new CustomAdapter(getActivity(), getData());
lv.setAdapter(adapter);
}
あなたがandroid.support.v7.widget.ListViewを使用してください。 import android.widget.ListViewを使用すると便利です。 – Elsunhoty
あなたはあなたが現在持っている問題以上に、そのメソッドにコールバックを持ち、空の 'ArrayList'を返すので、' getData() 'に問題があることを知っておくべきでしょう。 1。 – BlackHatSamurai
@Elsunhoty Im import android.widget.ListViewを使用しているので問題にはならない – Syord