问题描述
不知道如何更好地表达我的问题。
我目前正在研究一个应用程序,该应用程序允许猎人在日记中进行录入。 这些条目将保存在FirebaseFireStore集合中。 我已经实现了一种通过滑动删除条目的方法。
日志条目是在CardView中设计的,具有两个RelativeLayouts-foreGround,用于显示实际的日志条目和backGround,backGround只是一个带有删除图标的红色字段,默认情况下设置为不可见。
我只希望在滑动从RecyclerView中删除项目时显示backGround,以便用户可以看到他/她正在删除条目的提醒。
代码如下(很抱歉,如果代码混乱/不便。这是我第一次编写这种大小的代码):
journal_item.xml以获取RecyclerView中的条目
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginStart="8dp" android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:cardBackgroundColor="#FFFFF8" >
<RelativeLayout
android:id="@+id/view_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_row_background"
android:visibility="invisible">
<ImageView
android:id="@+id/delete_icon"
android:layout_width="@dimen/ic_delete"
android:layout_height="@dimen/ic_delete"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/padd_10"
android:src="@android:drawable/ic_menu_delete"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/padd_10"
android:layout_toLeftOf="@id/delete_icon"
android:text="@string/delete"
android:textColor="#fff"
android:textSize="13dp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="8dp" android:id="@+id/viewForeground">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/date_View" android:text="yyyy-MM-dd HH:mm:ss"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" android:maxLines="1"
/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/location_View" android:text="Location"
android:textAlignment="viewEnd"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:layout_alignParentTop="true"
android:maxLines="1" android:layout_toEndOf="@+id/date_View"
android:layout_alignParentEnd="true" android:ellipsize="end"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/shot_View" android:text="Schüsse: 3"
android:maxLines="1"
android:layout_alignParentStart="true" android:layout_below="@+id/date_View"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/hit_View" android:text="Treffer: 1"
android:layout_below="@+id/date_View" android:maxLines="1"
android:layout_toEndOf="@+id/shot_View" android:layout_marginStart="10dp"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/caliber_View" android:text="Kaliber: 0.9"
android:maxLines="1" android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/hit_View" android:layout_below="@+id/date_View"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/target_View" android:text="Ziel: Wildschwein"
android:layout_below="@+id/shot_View" android:maxLines="1" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/mean_View" android:text="Zweck: Warnschuss"
android:layout_marginStart="10dp"
android:layout_below="@+id/shot_View"
android:layout_toEndOf="@+id/target_View" android:maxLines="1" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
RecyclerView的activity_hunterjournal.xml:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
tools:context=".HunterJournal"
android:id="@+id/first_Lvl_Layout">
[...]
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/journal_View"
android:layout_width="281dp"
android:layout_height="302dp"
android:layout_marginTop="56dp"
android:scrollbars="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
[...]
</androidx.constraintlayout.widget.ConstraintLayout>
FirestoreRecyclerAdapter
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.jagdrevierapp.data.model.Journal;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
public class JournalAdapter extends FirestoreRecyclerAdapter<Journal,JournalAdapter.JournalHolder> {
//Constructor
public JournalAdapter(FirestoreRecyclerOptions<Journal> options) {
super(options);
}
@Override
protected void onBindViewHolder(JournalHolder journalHolder,int i,Journal journal) {
journalHolder.shotView.setText("Schüsse: " + journal.getShots());
journalHolder.hitView.setText("Treffer: " + journal.getHits());
journalHolder.caliberView.setText("Kaliber:" + String.valueOf(journal.getCaliber()));
journalHolder.targetView.setText("Ziel: " + journal.getTarget());
journalHolder.meanView.setText("Zweck: " + journal.getMean());
journalHolder.dateView.setText(journal.getDate().toString());
journalHolder.locationView.setText(journal.getLocation().toString());
}
@NonNull
@Override
public JournalHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.journal_item,parent,false);
return new JournalHolder(v);
}
public void deleteItem(int position){
getSnapshots().getSnapshot(position).getReference().delete();
}
class JournalHolder extends RecyclerView.ViewHolder{
TextView shotView;
TextView hitView;
TextView caliberView;
TextView targetView;
TextView meanView;
TextView dateView;
TextView locationView;
public RelativeLayout viewBackground;
public RelativeLayout viewForeground;
//Constructor
public JournalHolder(View itemView) {
super(itemView);
shotView = itemView.findViewById(R.id.shot_View);
hitView = itemView.findViewById(R.id.hit_View);
caliberView = itemView.findViewById(R.id.caliber_View);
targetView = itemView.findViewById(R.id.target_View);
meanView = itemView.findViewById(R.id.mean_View);
dateView = itemView.findViewById(R.id.date_View);
locationView = itemView.findViewById(R.id.location_View);
viewBackground = itemView.findViewById(R.id.view_background);
viewForeground = itemView.findViewById(R.id.viewForeground);
}
}
}
我实现ItemToucHelper的HunterJournal-Activity:
import android.util.Log;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.jagdrevierapp.data.model.Journal;
import com.example.jagdrevierapp.data.model.User;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.*;
import com.google.firebase.firestore.Query;
import java.util.Objects;
public class HunterJournal extends AppCompatActivity {
private final String TAG = "HunterJournal";
private final String COLLECTION_KEY = "User";
private final String JOURNAL_COLLECTION_KEY = "HunterJournal";
final FirebaseAuth mAuth = FirebaseAuth.getInstance();
final FirebaseUser mFirebaseUser = mAuth.getCurrentUser();
private final FirebaseFirestore db = FirebaseFirestore.getInstance();
private final CollectionReference dbUser = db.collection(COLLECTION_KEY);
private final CollectionReference dbJournal = dbUser.document(mFirebaseUser.getEmail())
.collection(JOURNAL_COLLECTION_KEY);
private JournalAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hunterjournal);
[...]
Query journalUser = dbJournal.orderBy("date",Query.Direction.DESCENDING);
final RecyclerView journalView = findViewById(R.id.journal_View);
journalView.setHasFixedSize(true);
journalView.setLayoutManager(new LinearLayoutManager(this));
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder viewHolder,@NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder,int direction) {
if (viewHolder instanceof JournalAdapter.JournalHolder) {
adapter.deleteItem(viewHolder.getAdapterPosition());
}
}
}).attachToRecyclerView(journalView);
FirestoreRecyclerOptions<Journal> options = new FirestoreRecyclerOptions.Builder<Journal>()
.setQuery(journalUser,Journal.class)
.build();
adapter = new JournalAdapter(options);
journalView.setAdapter(adapter);
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
最后是Journal-Model类
import com.google.firebase.firestore.GeoPoint;
public class Journal {
private int shots;
private int hits;
private double caliber;
private String mean;
private String target;
private String date;
private GeoPoint location;
public Journal() {
}
public Journal(int shots,int hits,double caliber,String mean,String target,String date,GeoPoint
location) {
this.shots = shots;
this.hits = hits;
this.caliber = caliber;
this.mean = mean;
this.target = target;
this.date = date;
this.location = location;
}
public int getShots() {
return shots;
}
public void setShots(int shots) {
this.shots = shots;
}
public int getHits() {
return hits;
}
public void setHits(int hits) {
this.hits = hits;
}
public double getCaliber() {
return caliber;
}
public void setCaliber(double caliber) {
this.caliber = caliber;
}
public String getMean() {
return mean;
}
public void setMean(String mean) {
this.mean = mean;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public GeoPoint getLocation() {
return location;
}
public void setLocation(GeoPoint location) {
this.location = location;
}
}
希望这就是你们所需要的。预先感谢您与我打交道:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)