如何在没有上查看持有人获得空在的OnClick适配器getAdapterPositions?

问题描述 投票:2回答:1

我想获得位置我尝试使用简单的面包,我得到它,但是当我尝试使用它的接口,我得到了一个错误

ListActivity

public class ListActivity extends BaseActivity implements ListAdapter.OnClickListenerAdapterList {

private DatabaseReference databaseReference;
private RecyclerView labelRecycleView;
private ArrayList<DataFirebase> listLabel = new ArrayList<>();
private ListAdapter listAdapter;
private Button bInput;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    findView();
    setDataToList();
    initListener();
}

private void setDataToList() {
    simpleway.progressDialog(ListActivity.this);
    databaseReference.child("Username").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnap : dataSnapshot.getChildren()) {

                DataFirebase modelClass = dataSnap.getValue(DataFirebase.class);
                modelClass.setLabel(dataSnap.getKey());
                listLabel.add(modelClass);
            }
            putLayoutManager();

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            System.out.println(databaseError.getDetails() + " " + databaseError.getMessage());
            simpleway.stopProgressDialog();
        }
    });
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    labelRecycleView.setLayoutManager(layoutManager);
    labelRecycleView.setItemAnimator(new DefaultItemAnimator());
}

private void putLayoutManager() {
    listAdapter = new ListAdapter(ListActivity.this, listLabel, this);
    labelRecycleView.setAdapter(listAdapter);
    simpleway.stopProgressDialog();
}

@Override
public void findView() {
    databaseReference = FirebaseDatabase.getInstance().getReference();
    labelRecycleView = findViewById(R.id.listRecyclerVIew);
    bInput = findViewById(R.id.inputData);
}


@Override
public void initListener() {
    bInput.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            simpleway.startnextActivity(ListActivity.this, InputActivity.class);
        }
    });
}

@Override
public void OnClickPositionsAndValue(String enough) {
    TitleFragment titleFragment = new TitleFragment();
    FragmentTransaction fragmentTransaction =
            getSupportFragmentManager()
                    .beginTransaction();
    Bundle bundle = new Bundle();
    bundle.putString("Check", enough);
    titleFragment.setArguments(bundle);
    fragmentTransaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_right,
            R.anim.enter_from_right, R.anim.exit_to_right)
            .replace(R.id.container_layout, titleFragment)
            .addToBackStack(null)
            .commit();
}
}

ListAdapter公共类ListAdapter扩展RecyclerView.Adapter {

private Simpleway simpleway;
private ArrayList<DataFirebase> dataList;
private AppCompatActivity someActivity;
private Fragment fragmentActivity;
private OnClickListenerAdapterList onClickListenerAdapterList;

public ListAdapter(AppCompatActivity someActivity, ArrayList<DataFirebase> dataList,
                   OnClickListenerAdapterList onClickListenerAdapterList) {
    this.dataList = dataList;
    this.someActivity = someActivity;
    simpleway = new Simpleway();
}

public ListAdapter(Fragment fragmentActivity, ArrayList<DataFirebase> dataList,
                   OnClickListenerAdapterList onClickListenerAdapterList) {
    this.dataList = dataList;
    this.fragmentActivity = fragmentActivity;
    simpleway = new Simpleway();
}


@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.item_label, viewGroup, false);
        return new ViewHolder(view, onClickListenerAdapterList);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int positions) {
    final DataFirebase labelList = dataList.get(positions);

    viewHolder.textLabel.setText(labelList.getLabel());
    String enough = labelList.getLabel();

}

@Override
public int getItemCount() {
    return dataList.size();
}

class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    LinearLayout linearLabel;
    TextView textLabel;
    OnClickListenerAdapterList monClickListenerAdapterList;


    ViewHolder(@NonNull View itemView, OnClickListenerAdapterList onClickListenerAdapterList) {
        super(itemView);
        textLabel = itemView.findViewById(R.id.text_label);
        linearLabel = itemView.findViewById(R.id.linearLabel);
        monClickListenerAdapterList = onClickListenerAdapterList;

        linearLabel.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        simpleway.toastMessage(someActivity.getApplicationContext(), String.valueOf(getAdapterPosition()));
        monClickListenerAdapterList.OnClickPositionsAndValue(getAdapterPosition());
    }
}

public interface OnClickListenerAdapterList{
    void OnClickPositionsAndValue(int positions);
}


}

而且大多当我尝试getAdapterPositions我得到的错误是这样的。

错误

 java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.parzival.flashcard.adapter.ListAdapter$OnClickListenerAdapterList.OnClickPositionsAndValue(int)' on a null object reference
    at com.example.parzival.flashcard.adapter.ListAdapter$ViewHolder.onClick(ListAdapter.java:90)

我如何getAdapter位置?是有什么错我的界面吗?

android firebase adapter
1个回答
1
投票

这个问题似乎是你的monClickListenerAdapterList只是空。

如果你看一下你的ListAdapter类的构造函数,你会看到:

public ListAdapter(AppCompatActivity someActivity, ArrayList<DataFirebase> dataList,
                   OnClickListenerAdapterList onClickListenerAdapterList) {
    this.dataList = dataList;
    this.someActivity = someActivity;
    simpleway = new Simpleway();
}

但是,请注意,虽然你在OnClickListenerAdapterList onClickListenerAdapterList作为参数传递,你从来不叫this.onClickListenerAdapterList = onClickListenerAdapterList;在构造函数中。

因此,你只需传入听者,但从来没有将其存储......所以ListAdapter的onClickListenerAdapterList实际上仍然无效。

所以,当你在onClickListenerAdapterList您ViewHolders通过,你实际上传递的是仍然是空的onClickListenerAdapterList。

因此,要改正错误,只需改变你的构造函数为:

public ListAdapter(AppCompatActivity someActivity, ArrayList<DataFirebase> dataList,
                       OnClickListenerAdapterList onClickListenerAdapterList) {
        this.dataList = dataList;
        this.someActivity = someActivity;
        this.onClickListenerAdapterList = onClickListenerAdapterList;
        simpleway = new Simpleway();
    }
© www.soinside.com 2019 - 2024. All rights reserved.