2017-11-21 6 views
0

목표 : 사용 RecyclerView 활동에의 EditText 필드를 추가 할 수RecyclerView는 클릭 할 때까지 EditText를 추가하지 않습니까? (notifyDataSetChanged?)

는 무슨 일

: 버튼 내가 "추가"할 때마다 화면에 추가 할 이미지 뷰와 글고 치기와은 LinearLayouts (수평)에 대해 원하는 것입니다 클릭 함. 그들은 내가 때까지 표시되지 않는 :

-1) 나는 이미 입력 한 후 글고 필드를 클릭) 글고 필드에 입력하고

-3 추가를 클릭

-2

를) 수행을 클릭합니다 다시 클릭하거나 완료를 클릭하십시오.

2 단계가 아니라 3 단계를 추가해야합니다. 내 생각에는 notifyDataSetChanged와 관련이 있지만 확실하지 않습니다. 문서, 자습서, YouTube 동영상을 통과하는 지난 몇 일 지출, 그리고 유래는

를 검색

테스트 수행 :

연구 수행 notifyDataSetChanged()를 호출 내 방법의 위치를 ​​이동하려고; inputType을 변경 시도 레이아웃 의 크기를 변경 시도

MyAdapter.java :

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

그것은 보이는 것 '추가'클릭 이벤트. 어댑터/recyclerview를 업데이트하지 않고 목록에 항목을 추가하기 만하면됩니다.

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(); 

는 그래서 그 모양을

하나의 옵션은 사용자가 추가 특정 위치를 사용하는 것입니다 : 내 RegisterBusinessActivity.java에서 mAdapter.updateDataSet (linearLayoutList) 있습니다 .... 당신은 또한 onClick에 추가 말하고 있습니까? 또는 onClick? –

+0

그래서 그것들을 추가하지만 순서는 Odd입니다. 먼저 'test1'을 입력 한 다음 Add를 클릭하십시오. 두 번째에 'test2'를 입력하고 '추가'를 클릭하십시오. 세 번째 것은 1과 2를 넘기 때문에 'test3'을 입력하면 위에서 아래로 test3, test1, test2로 표시됩니다. –