내 목록보기 항목에 제거 단추가 포함되어 있으며이를 데이터베이스에서 항목을 제거하기 위해 어댑터에 설정했습니다. 이제 일단 완료되면 listView가 포함 된 조각을 새로 고쳐 해당 항목을 제거 할 수 있습니까? 아래와 같이 관련 코드 :ListView는 항상 마지막 항목을 삭제합니다.
제거 항목 기능 어댑터 :
holder.actionIndicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Delete item");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
FirebaseMethods firebaseMethods = new FirebaseMethods(mContext);
firebaseMethods.deleteHashtagFromDatabase(title);
dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "no",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
});
목록보기는 설정 내 조각이 같다 :
private void setupListView(){
Log.d(TAG, "setupListView: setting up list");
final ArrayList<HashTag> hashTags = new ArrayList<>();
myRef = FirebaseDatabase.getInstance().getReference();
Query query = myRef.child(getString(R.string.dbname_user_hashtags))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
if(singleSnapshot != null){
hashTags.add(0, singleSnapshot.getValue(HashTag.class));
}
}
HashTagListViewAdapter adapter = new HashTagListViewAdapter(getActivity(), R.layout.layout_list_itemview, hashTags);
hashtagListView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
감사합니다!
UPDATE :
업데이트 어댑터
holder.actionIndicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
업데이트 조각 :
가 지금은 아래와 같이 조각의 ListView OnItemClickListener에 어댑터에서 하위 항목에 OnClickListener를 통과
hashtagListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
long viewId = view.getId();
Log.d(TAG, "onItemClick: viewId is " + viewId);
Log.d(TAG, "onItemClick: position is " + position);
final HashTagListViewAdapter adapter = new HashTagListViewAdapter(getActivity(), R.layout.layout_list_itemview, hashTags);
final HashTag hashTag = hashTags.get(position);
final String title = hashTag.getTitle();
Log.d(TAG, "onItemClick: title is " + title);
if(viewId == R.id.deleteFromListBtn){
AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
alertDialog.setTitle("delete item");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
FirebaseMethods firebaseMethods = new FirebaseMethods(getActivity());
firebaseMethods.deleteHashtagFromDatabase(title);
Log.d(TAG, "onClick: title is " + title);
// NEW PROBLEM HERE!
adapter.remove(hashTag);
Log.d(TAG, "onClick: removed hashtag is " + hashTag);
adapter.notifyDataSetChanged();
Log.d(TAG, "onItemClick: item removed from list.");
dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "no",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
}
});
하지만 문제는 내가 항목을 삭제할 때 listView가 항상보기의 마지막 항목을 삭제한다는 것입니다. 그러나 올바른 항목이 데이터베이스에서 삭제되었으며 로그에 따라이 코드 adapter.remove(hashTag)
이 삭제하려는 올바른 항목을 가져옵니다.
나는 listview의 하위 항목에 대한 어댑터의 OnClickListener에서 제거 작업을 정의해야합니다. 따라서 OnClickListener는 조각의 listView ItemOnClickListener에 설정되지 않았습니다.그 부분을 수정했지만 새로운 문제가 나타납니다. 내 편집을 참조하십시오. 감사! – user8795747