简体   繁体   English

将数据从listview中的单击项传递到另一个活动时出错

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

After populating the Listview with the list of diaries, upon clicking a particular diary, the corresponding pictures have to be displayed in another activity. 在使用日记列表填充Listview之后,在单击特定日记时,相应的图片必须显示在另一个活动中。

For this, I'm passing the position of clicked item in the intent. 为此,我在意图中传递了单击项的位置。 But, the app crashes upon execution 但是,应用程序在执行时崩溃

This is the history fragment code 这是历史片段代码

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

The following error occurs - Attempt to invoke virtual method 'void android.widget.listview.setonitemclicklistener(android.widget.adapterview$onitemclicklistener)' on a null object reference 发生以下错误 - 尝试在空对象引用上调用虚拟方法'void android.widget.listview.setonitemclicklistener(android.widget.adapterview $ onitemclicklistener)'

在您调用lv#setOnItemClickListener ,您的ListView(lv)尚未实例化,直到发生对ValueEventListener#onDataChange的回调。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 单击ListView项时将_id从一个活动传递到另一个活动 - Passing an _id from one activity to another when ListView item is clicked 将数据从列表视图传递到另一个活动的edittext - Passing data from listview to edittext of another activity 将关联到 ListView 单元格的数据传递给项目的另一个活动 onClick() - Passing the data associated to a ListView cell to another activity onClick() of the item 将模型从活动传递到另一个活动时出错 - Error while passing a model from an activity to another 将RecyclerView CardView单击项目数据传递给活动 - Passing RecyclerView CardView Clicked Item Data To Activity 通过可点击的 ListView 将 Firebase 数据从一个活动传递到另一个活动 - Passing firebase data from one activity to another via clickable ListView 加载新活动时,将选定项从ListView Android传递到另一个活动会引发NullPointerException - Passing selected item from ListView Android to another Activity throws a NullPointerException when loading the new activity 在ArrayList项目上单击将数据从一个活动传递到另一个活动 - passing data from one activity to another on ArrayList Item click 单击ListView中的项目时在另一个活动中显示列表 - Showing a List in another activity when clicked on an item in ListView Android-从另一个活动将项目添加到ListView - Android - Adding item to ListView from another Activity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM