簡體   English   中英

將數據從listview中的單擊項傳遞到另一個活動時出錯

[英]Error while passing data from clicked item in listview to another activity

在使用日記列表填充Listview之后,在單擊特定日記時,相應的圖片必須顯示在另一個活動中。

為此,我在意圖中傳遞了單擊項的位置。 但是,應用程序在執行時崩潰

這是歷史片段代碼

public class HistoryFragment extends Fragment
{
ListView lv;
Context context;
public HistoryFragment()
{
    //default constructor
}

//The following method will get the context from the activity to which the fragment is attached
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    this.context=context;
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
    final View view = inflater.inflate(R.layout.scrolllist, container, false);
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef = rootRef.child("image").child(uid);
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //List<String> cities = new ArrayList<>();
            //cities = new ArrayList<>();
            final ArrayList<Word> cities = new ArrayList<>();
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String cityName = ds.getKey();
                cities.add(new Word(cityName));
            }
            lv = (ListView)view.findViewById(R.id.list_of_ds);
            ContentAdapter arrayAdapter = new ContentAdapter(context,cities);
            lv.setAdapter(arrayAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError)
        {
            //Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
        }
    };
    uidRef.addListenerForSingleValueEvent(valueEventListener);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {

        @Override

        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            //String diary_name=title.get(position).toString();
            Intent myIntent = new Intent(view.getContext(), DiaryViewActivity.class);
            myIntent.putExtra("diaryname", lv.getItemAtPosition(position).toString());
            startActivity(myIntent);

        }
    });
    return view;
}
}




This is the activity to which intent is passed
//DiaryViewActivity.java


public class DiaryViewActivity extends AppCompatActivity implements       IFirebaseLoadDone
{

ViewPager viewPager;
MAdapter adapter;
DatabaseReference diaries;
IFirebaseLoadDone iFirebaseLoadDone;
FirebaseAuth mAuth=FirebaseAuth.getInstance();
//final ArrayList<Word> word = new ArrayList<Word>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_diary_view);
    Bundle bd = getIntent().getExtras();
    String myVal = bd.getString("diaryname");
    String currentUser;
    currentUser = mAuth.getCurrentUser().getUid();
    diaries = FirebaseDatabase.getInstance().getReference().child("image").child(currentUser)
            .child(myVal);

    iFirebaseLoadDone = this;

    loadDairy();

    viewPager = (ViewPager)findViewById(R.id.view_pager);
    viewPager.setPageTransformer(true,new DepthPageTransformer());

}

private void loadDairy() {
    diaries.addListenerForSingleValueEvent(new ValueEventListener() {
        List<Display> diaryList = new ArrayList<>();
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot data:dataSnapshot.getChildren()) {
                Display d = data.getValue(Display.class);
                //word.add(new Word(d.dname));
                diaryList.add(d);
            }
            iFirebaseLoadDone.onFirebaseLoadSuccess(diaryList);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            iFirebaseLoadDone.onFirebaseLoadFailed(databaseError.getMessage());
        }
    });
}

@Override
public void onFirebaseLoadSuccess(List<Display> diaryList) {

    adapter =  new MAdapter(this,diaryList);
    viewPager.setAdapter(adapter);
}

@Override
public void onFirebaseLoadFailed(String message) {
    Toast.makeText(this,"error! "+message,Toast.LENGTH_SHORT).show();
}
}

發生以下錯誤 - 嘗試在空對象引用上調用虛擬方法'void android.widget.listview.setonitemclicklistener(android.widget.adapterview $ onitemclicklistener)'

在您調用lv#setOnItemClickListener ,您的ListView(lv)尚未實例化,直到發生對ValueEventListener#onDataChange的回調。

暫無
暫無

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

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