Reputation: 345
I have a RecyclerView with each item containing an EditText. I start another activity using startActivityForResult. On returning from the activity, I want to update my EditText of that item of the list with some text. How can I achieve that?
Upvotes: 1
Views: 853
Reputation: 9442
Please try this..... I posted full sample which your asked.
1. activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
2. row_item.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="@dimen/activity_vertical_margin"
app:cardElevation="8dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<ImageView
android:id="@+id/food_preview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@mipmap/ic_launcher"
android:layout_marginRight="16dp" />
<TextView
android:id="@+id/food_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/food_preview"
android:text="Row Title"
android:textSize="30sp" />
<EditText
android:id="@+id/food_order_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/food_name"
android:layout_toRightOf="@+id/food_preview"
android:hint="Order Count" />
</RelativeLayout>
</android.support.v7.widget.CardView>
3. RecyclerViewAdapter.java
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private List<Data> list = Collections.emptyList();
private Context context;
private OnItemClick onItemClick;
public RecyclerViewAdapter(List<Data> list, Context context, OnItemClick onItemClick) {
this.list = list;
this.context = context;
this.onItemClick = onItemClick;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//Inflate the layout, initialize the View Holder
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false);
ViewHolder holder = new ViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//Use the provided View Holder on the onCreateViewHolder method to populate the current row on the RecyclerView
holder.food_name.setText(list.get(position).food_name);
holder.food_order_count.setText(list.get(position).food_order_count);
holder.food_preview.setImageResource(R.mipmap.ic_launcher);
//animate(holder);
}
@Override
public int getItemCount() {
//returns the number of elements the RecyclerView will display
return list.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
// Insert a new item to the RecyclerView on a predefined position
public void insert(int position, Data data) {
list.add(position, data);
notifyItemInserted(position);
}
// Remove a RecyclerView item containing a specified Data object
public void remove(Data data) {
int position = list.indexOf(data);
list.remove(position);
notifyItemRemoved(position);
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
CardView cv;
TextView food_name;
EditText food_order_count;
ImageView food_preview;
ViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cardView);
food_name = (TextView) itemView.findViewById(R.id.food_name);
food_order_count = (EditText) itemView.findViewById(R.id.food_order_count);
food_preview = (ImageView) itemView.findViewById(R.id.food_preview);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(onItemClick != null){
onItemClick.onClick(v, list.get(getAdapterPosition()), getAdapterPosition());
}
}
}
public interface OnItemClick{
void onClick(View view, Data data, int pos);
}
}
4.MainActivity.java
public class MainActivity extends AppCompatActivity {
private List<Data> list;
private int position;
private RecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = fill_with_data();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
adapter = new RecyclerViewAdapter(list, this, mOnItemClick);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
RecyclerViewAdapter.OnItemClick mOnItemClick = new RecyclerViewAdapter.OnItemClick() {
@Override
public void onClick(View view, Data data, int pos) {
position = pos;
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 2);
}
};
public List<Data> fill_with_data() {
List<Data> data = new ArrayList<>();
data.add(new Data("Food 1", " ", ""));
data.add(new Data("Food 2", " ", ""));
data.add(new Data("Food 3", "", ""));
data.add(new Data("Food 4", "", ""));
data.add(new Data("Food 5", "", ""));
data.add(new Data("Food 6", "", ""));
data.add(new Data("Food 7", "", ""));
data.add(new Data("Food 8", "", ""));
data.add(new Data("Food 9", "", ""));
data.add(new Data("Food 10", "", ""));
data.add(new Data("Food 11", "", ""));
data.add(new Data("Food 12", "", ""));
data.add(new Data("Food 13", "", ""));
data.add(new Data("Food 14", "", ""));
return data;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
String count = data.getStringExtra("COUNT");
Data update_data = list.get(position);
update_data.setFood_order_count(count);
// **This line do magic** which your asked.
adapter.notifyItemChanged(position, update_data);
}
}
}
5. activity_second.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button" />
</LinearLayout>
6. SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String count = "10";//Hardcoded value; replace your runtime value;
Intent intent = new Intent();
intent.putExtra("COUNT", count);
setResult(2, intent);
finish();
}
});
}
}
7. AndroidManifest.xml
<activity android:name=".MainActivity">
.......
.......
</activity>
<activity android:name=".SecondActivity"/>
Upvotes: 1