2017-03-12 1 views
0

各アイテムにEditTextが含まれているRecyclerViewがあります。 startActivityForResultを使用して別のアクティビティを開始します。アクティビティから戻ると、リストのそのアイテムのEditTextをテキストで更新したいと思います。それをどうすれば実現できますか?RecyclerViewのEditTextコンポーネントのテキストを更新する

TIA

+0

リサイクラービューとアクティベーションコードを共有できますか? – Cochi

答えて

0

私はあなたの質問の完全なサンプルを投稿しました。

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"/> 

8.ハッピーコーディング....

あなたは間違いなくした場合お気軽にお尋ねください。

関連する問題