2017-11-21 13 views
0

目標:使用RecyclerView何が起こっている活動RecyclerViewは2回目のクリックまでEditTextを追加しませんか? (?notifyDataSetChanged)

へのEditTextフィールドを追加するには:ボタンがある「追加」するたびに、私は画面に追加するImageViewのとのEditTextで(水平)LinearLayoutsのために希望クリックした彼らは、私まで表示されません。

-1)のEditTextフィールドに入力し、

を[完了]をクリックします-2)をクリックし

を追加-3)私はすでに、その後に入力されたとのEditTextフィールドをクリッククリックは、それが私の考え3.ステップ、ステップ2の後にない追加すべきで再び行われ、またはそれの

オフ]をクリックし、それはnotifyDataSetChangedとは何かを持っているが、私はよく分からないのですか?

研究が行わ:最後の数日間は、テストが行​​わドキュメント、チュートリアル、ユーチューブの動画、およびstackoverflowの検索

を経由過ごし:notifyDataSetChanged()を呼び出して、私の方法の配置を移動しようとしました。

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.LinearLayout; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 

class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ 
    private ArrayList<LinearLayout> mDataSet; 
    private Context mContext; 
    private Random mRandom = new Random(); 


    public MyAdapter(Context context){ 

     mContext = context; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder{ 
     public EditText mTextEditName, mTextEditLocation; 
     public LinearLayout mRelativeLayout; //from the (Main)Activity XML 
     public ViewHolder(View v){ 
      super(v); 
      mTextEditName = (EditText) v.findViewById(R.id.nameOfBusinessET); 

      mRelativeLayout = (LinearLayout) v.findViewById(R.id.rl); 
     } 
    } 

    void updateDataSet(ArrayList<LinearLayout> myArrayList) { 
     mDataSet = myArrayList; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
     // Create a new View 
     View v = LayoutInflater.from(mContext).inflate(R.layout.row_layout,parent,false); 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 

     holder.mTextEditName.setText(""); 

    }  

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

} 

RegisterBusinessActivity.java:

public class RegisterBusinessActivity extends Activity { 

    EditText businessLocationET; 

    //FIREBASE ITEMS 
    private static FirebaseUser currentUser; 
    private static final String TAG = "RealtimeDB"; 
    private FirebaseDatabase database; 
    private DatabaseReference dbRef; 
    private EditText businessName; 

    //RECYCLERVIEW ITEMS 
    private Context mContext; 
    LinearLayout mLinearLayout; 
    private RecyclerView mRecyclerView; 
    private MyAdapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 
    int position; 
    ArrayList<LinearLayout> linearLayoutList = new ArrayList<LinearLayout>(); 

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

     Button addLocationBtn = (Button) findViewById(R.id.addLocationBtn); 
     businessLocationET = (EditText) findViewById(R.id.businessLocationET); 


     // Get the widgets reference from XML layout 
     mLinearLayout = (LinearLayout) findViewById(R.id.rl); 
     mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     mContext = getApplicationContext(); // Get the application context 
     linearLayoutList.add(mLinearLayout); 

     // Define a layout for RecyclerView 
     mLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     // Initialize a new instance of RecyclerView Adapter instance 
     mAdapter = new MyAdapter(mContext); 

     // Set the adapter for RecyclerView 
     mRecyclerView.setAdapter(mAdapter); 
     mAdapter.updateDataSet(linearLayoutList); 


     //FIREBASE FIELDS 
     businessName = (EditText) findViewById(R.id.nameOfBusinessET); 
     database = FirebaseDatabase.getInstance(); 
     dbRef = database.getReference("/data"); 
     currentUser = 
       FirebaseAuth.getInstance().getCurrentUser();    



     //ADD EXTRA LOCATIONS 
     addLocationBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       linearLayoutList.add(mLinearLayout); 
      } 
     }); 


    DatabaseReference.CompletionListener completionListener = 
      new DatabaseReference.CompletionListener() { 
       @Override 
       public void onComplete(DatabaseError databaseError, 
             DatabaseReference databaseReference) { 

        if (databaseError != null) { 
         notifyUser(databaseError.getMessage()); 
        } 
       } 
      }; 


    private void notifyUser(String message) { 
     Toast.makeText(RegisterBusinessActivity.this, message, 
       Toast.LENGTH_SHORT).show(); 
    } 


} 

答えて

0

それはあなたが後にリサイクルを更新しないように見えるのです はinputType

MyAdapter.javaを変更しようとしたレイアウト の寸法を変更しようとしました「追加」クリックイベント。アダプタ/リサイクルビューを更新することなくリストに項目を追加するだけです。

mAdapter.notifyItemInserted(yourItems.size() - 1); 

以上使用するよりも::

addLocationBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       linearLayoutList.add(mLinearLayout); 
       mAdapter.updateDataSet(linearLayoutList); 
      } 
}); 
+0

こんにちはmotis10:

mAdapter.notifyDataSetChanged(); 

だから、それはそのようになります

1つのオプションは、ちょうどあなたが追加特定の位置を使用することです。私は私のRegisterBusinessActivity.javaにmAdapter.updateDataSet(linearLayoutList)を持っています....あなたはまたonClickにそれを追加すると言っていますか?またはonClickのJUST? –

+0

それを追加しますが、順序は奇数です。最初に「test1」と入力し、「Add」をクリックします。私は2番目の 'test2'を入力し、[追加]をクリックします。 3番目は1と2を上回っているので、 'test3'と入力すると、test3、test1、test2のように上から下に表示されます –

関連する問題