2017-10-29 5 views
0

をクリックしたときに、私はボタンは解決:ボタンが

これは、現在私は、[追加]ボタンを最初にクリックした場合を意味しますが、一度だけ働く「追加」をクリックするとRecyclerViewに項目を追加したいRecyclerViewにアイテムを追加します。アイテムは追加されて表示されますが、その後は何も追加されません。ここで

がRecyclerViewアダプタ

public class Adapter extends RecyclerView.Adapter<Adapter.myViewHolder> { 

    List<Integer> listItem; 

    public Adapter(List<Integer> passedListItem){ 
     this.listItem = passedListItem; 
    } 

    @Override 
    public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.recyclerview_layout, parent, false); 

     myViewHolder holder = new myViewHolder(itemView); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(myViewHolder holder, int position) { 
     int itemNumber = position+1; 
     holder.itemTextView.setText("Item Number " + itemNumber + ": " + listItem.get(position)); 
    } 

    @Override 
    public int getItemCount() { 
     return listItem.size(); 
    } 

    public class myViewHolder extends RecyclerView.ViewHolder { 
     TextView itemTextView; 

     public myViewHolder(View view){ 
      super(view); 
      itemTextView = view.findViewById(R.id.tv_itemTextView); 
     } 
    } 
} 

ための私のコードであるここに私のMainActivityは、私は[追加]ボタンをクリックすると、最初の項目が追加され、表示されている

public class MainActivity extends AppCompatActivity { 

    List<Integer> itemList = new ArrayList<>(); 
    EditText itemEditText; 

    RecyclerView recyclerView; 
    Adapter rvAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     recyclerView = (RecyclerView)findViewById(R.id.rv_itemsRecyclerView); 
     itemEditText = (EditText)findViewById(R.id.et_editText); 

     //Setting the layout and Adapter for RecyclerView 
     recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 
     rvAdapter = new Adapter(itemList); 
     recyclerView.setAdapter(rvAdapter); 
    } 

    //Click listener for "Add" Button 
    public void onAddButtonClicked(View view) { 

     try { 
      int IntegerFormat = Integer.valueOf(itemEditText.getText().toString()); 
      itemList.add(IntegerFormat); 
      rvAdapter.notifyItemInserted(itemList.size() - 1); 
      itemEditText.setText(""); 
     } catch(NumberFormatException e) { 
      Toast.makeText(getApplicationContext(), "The field is empty", 
        Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

だが、私は、[追加]をクリックしたときボタンを2回押すと何も起こりません。

EDIT:明らかに、Recyclerのビューレイアウトの幅と高さはwrap_contentの代わりにmatch_parentに設定されていたので、ボタンをクリックすると2番目の項目が追加されていましたが、そして私は下にスクロールしようとしても馬鹿だった。私はちょうどすべてがちょうど正常に働いていたことを知るために1時間の解決策を見つけようとしていましたが、私は無視していました。この愚かな問題で誰かを気にして申し訳ありません。私が初心者だと言っているのは、そんなばかげた誤りの言い訳ではない。

+1

rvAdapter.notifydatachanged();を試してください。 rvAdapter.notifyItemInserted(itemList.size() - 1)の代わりに。 –

+0

疲れましたが動作しませんでした – Aryan

+1

ここにXMLファイルを追加できますか?レイアウトアクティビティとアダプターアイテムの両方のXMLファイル –

答えて

2

あなたのコードをチェックしたところ、うまくいきました。間違いはrecyclerview_layout.xmlファイルに記載されています。あなたが持っていることはこれです:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/tv_itemTextView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="TextView" /> 
</LinearLayout> 

にこれを変更してください。代わりにlayout_height =「match_parent」:あなたのリニアレイアウトがアンドロイドを持っているので、あなたの最初のリスト項目が全体のリサイクルビューを満たしている

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/tv_itemTextView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 
</LinearLayout> 

android:layout_height = "wrap_content"です。そのため、最初のアイテムは他のアイテムを隠していますが、アダプタ内にあります。これはlogcatにログインすることで確認できます。

+0

あなたはようこそ!将来的に同じ問題を抱えている人々がすぐに解決策を見つけられるように、それが役立ったら、答えとしてマークしてください。 –

関連する問題