Ich habe viel Ärger mit diesem, und ich kann Dinge zu meinem Problem durch eine Suche finden, aber sie scheinen nicht mein Problem zu beheben, und ich habe es versucht alles was ich kann. Ich kann nicht scheinen, dieses Problem für das Leben von mir zu beheben.EditText Inhalt in RecyclerView verschwindet und springt um
Also habe ich eine App, College-Kurse zu verfolgen. In dem, ich habe eine Schaltfläche, um einen benutzerdefinierten Ansichtshalter zu einem RecyclerView hinzuzufügen. Dieser benutzerdefinierte Ansichtshalter enthält zwei EditText-Felder zusammen mit einer CheckBox. Wenn ich nun auf den Button "Kurs hinzufügen" klicke, werden diese drei Dinge hinzugefügt. Das funktioniert gut. Wenn ich jedoch einen beliebigen Text in das EditText-Feld einfüge und dann einen weiteren Kurs hinzufüge, löscht er alle Inhalte, die zuvor in die EditText-Felder eingegeben wurden. Ich versuche, diesen Inhalt ziemlich dauerhaft zu speichern, oder zumindest bis der Benutzer diese Ansicht löscht (indem ich entweder auf die Schaltfläche "Alle löschen" klicke oder nach links wische). Ich habe jedoch extreme Schwierigkeiten damit. Ich habe versucht, zu jeder Ansicht einen "TextChangedListener" hinzuzufügen, aber ich kann nicht scheinen, dass dies funktioniert. Ich habe versucht, einen benutzerdefinierten Textlistener zu erstellen und ihn in meiner "onCreateViewHolder" -Methode hinzuzufügen, und dann den Text in der "onBindViewHolder" -Methode festzulegen, aber das scheint mein Problem nicht zu lösen.
Mein anderes Problem, von dem ich glaube, dass es wahrscheinlich damit zusammenhängt, tritt auf, wenn ich genug Ansichten in der RecyclerView habe, um nach unten zu scrollen, und ich Text in ein EditText-Feld eingib. Wenn ich dann nach unten scrolle, erscheint der von mir eingegebene Text in anderen EditText-Feldern. Oder wenn ich meine CheckBox ankreuze, dann scrolle ich nach unten, dann werden auch andere Kontrollkästchen aktiviert. Hier sind einige Bilder für ein Visual.
Hier ist, wenn ich einen neuen Kurs hinzufügen, und der Text verschwindet:
Hier ist meine Scrolling Ausgabe:
Hier meine Dateien sind, auch.
Zuerst mein MainActivity.java:
import android.content.ClipData;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ArrayList<ListItems> itemsList = new ArrayList<ListItems>();
private RecyclerView mRecyclerView;
private MyRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// For the recycler view.
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.rl);
// For the addCourse button.
final Button addCourse = (Button) findViewById(R.id.addCourse);
addCourse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListItems.createListItem(itemsList);
adapter = new MyRecyclerAdapter(MainActivity.this, itemsList);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(linearLayoutManager);
}
});
final Button clearAll = (Button) findViewById(R.id.clearAll);
clearAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// In order to clear the list.
adapter.clearAdapter();
}
});
// For the drag and drop/swipe to dismiss.
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
ItemTouchHelper.LEFT) {
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
final int fromPos = viewHolder.getAdapterPosition();
final int toPos = target.getAdapterPosition();
Collections.swap(itemsList, fromPos, toPos);
adapter.notifyItemMoved(fromPos, toPos);
return true;
}
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.onItemDismiss(viewHolder.getAdapterPosition());
}
});
itemTouchHelper.attachToRecyclerView(mRecyclerView);
} // End of onCreate
} // End of MainActivity
Nun, mein Adapter:
import android.app.Activity;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.view.LayoutInflater;
import android.widget.CheckBox;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyRecyclerAdapter extends RecyclerView.Adapter<CustomRowViewHolder> {
private ArrayList<ListItems> itemsList;
private Context mContext;
private int focuseditem = 0;
String afterTextChanged = "";
public MyRecyclerAdapter(Context context, ArrayList<ListItems> itemsList){
this.itemsList = itemsList;
this.mContext = context;
}
@Override
public CustomRowViewHolder onCreateViewHolder(final ViewGroup viewGroup, int position) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.new_course_row, null);
final CustomRowViewHolder holder = new CustomRowViewHolder(v, new CustomTextListener());
holder.creditsText.setInputType(InputType.TYPE_CLASS_NUMBER);
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.checkBox.isChecked()) {
holder.courseText.setEnabled(false);
holder.courseText.setFocusable(false);
holder.courseText.setInputType(InputType.TYPE_NULL);
holder.creditsText.setEnabled(false);
holder.creditsText.setFocusable(false);
holder.creditsText.setInputType(InputType.TYPE_NULL);
} else {
holder.courseText.setEnabled(true);
holder.courseText.setFocusable(true);
holder.courseText.setFocusableInTouchMode(true);
holder.courseText.setInputType(InputType.TYPE_CLASS_TEXT);
holder.creditsText.setEnabled(true);
holder.creditsText.setFocusable(true);
holder.creditsText.setFocusableInTouchMode(true);
holder.creditsText.setInputType(InputType.TYPE_CLASS_NUMBER);
} // End if else
}
});
return holder;
} // End of onCreateViewHolder
@Override
public void onBindViewHolder(final CustomRowViewHolder customRowViewHolder, int position) {
ListItems listItem = itemsList.get(position);
customRowViewHolder.itemView.setSelected(focuseditem == position);
customRowViewHolder.getLayoutPosition();
customRowViewHolder.customTextListener.updatePosition(position, customRowViewHolder);
customRowViewHolder.courseText.setText(itemsList.get(position).getCourse());
} // End of onBindViewHolder
public void clearAdapter() {
itemsList.clear();
notifyDataSetChanged();
} // End of clearAdapter
public int getItemCount() {
return(null != itemsList ? itemsList.size() : 0);
} // End of getItemCount
public void onItemDismiss(int position) {
itemsList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, itemsList.size());
} // End of onItemDismiss
public void onItemMove(List<ListItems> itemsList, int fromPosition, int toPosition) {
Collections.swap(itemsList, fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
} // End of onItemMove
} // End of MyRecyclerAdapter
/**
* Created by Thomas on 6/3/2016.
*/
class CustomTextListener implements TextWatcher {
private int position;
private CustomRowViewHolder customRowViewHolder;
public void updatePosition(int position, CustomRowViewHolder customRowViewHolder) {
this.position = position;
this.customRowViewHolder = customRowViewHolder;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
customRowViewHolder.courseText.setText(s.toString());
}
}
Mein "CustomRowViewHolder.java":
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class CustomRowViewHolder extends RecyclerView.ViewHolder{
protected EditText courseText;
protected EditText creditsText;
protected CheckBox checkBox;
protected RelativeLayout relativeLayout;
protected CustomTextListener customTextListener;
public CustomRowViewHolder(View view, CustomTextListener customTextListener) {
super(view);
this.customTextListener = customTextListener;
this.courseText = (EditText) view.findViewById(R.id.course);
this.creditsText = (EditText) view.findViewById(R.id.credits);
this.checkBox = (CheckBox) view.findViewById(R.id.complete);
this.relativeLayout = (RelativeLayout) view.findViewById(R.id.relLayout);
view.setClickable(true);
}
}
schließlich mein „Listitem. Java ":
import java.util.ArrayList;
public class ListItems {
private String course;
private String credits;
private Boolean complete;
public ListItems(String mCourse, String mCredits, Boolean mComplete) {
course = mCourse;
credits = mCredits;
complete = mComplete;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public String getCredits() {
return credits;
}
public void setCredits(String credits) {
this.credits = credits;
}
public Boolean getIsComplete() {
return complete;
}
public void setIsComplete(Boolean complete) {
this.complete = complete;
}
public static ArrayList<ListItems> createListItem(ArrayList<ListItems> itemsList) {
itemsList.add(new ListItems(null, null, false));
return itemsList;
} // End of createListItem
public static ArrayList<ListItems> removeListItem(ArrayList<ListItems> itemsList) {
if (itemsList.size() == 0) {
return itemsList;
} else {
itemsList.remove(0);
} // End if
return itemsList;
} // End of removeListItem
} // End of ListItems
Vielen Dank im Voraus für jede Hilfe! Es ist sehr geschätzt, da ich schon sehr lange an diesem Thema festhalte!
Sie müssen Liste Ihrer yourditText-Inhalte pflegen .. !! ! –