2016-08-02 5 views
-1

RecyclerView 목록이 있습니다. MainActivity에서 onItemLongClick 메서드를 설정하여 DialogFragment를 시작하려고합니다. 이 대화 상자는 사용자에게 RecyclerView 목록의 항목을 삭제할 것인지를 묻는 메시지를 표시합니다. 프래그먼트가 SQLite 데이터베이스에서 올바른 항목을 삭제할 수 있도록 RecyclerView 항목의 위치를 ​​어댑터 파일에서 캡처하고 싶습니다.Android RecyclerView : 데이터를 어댑터의 조각에 넣으려면 어떻게해야하나요?

RecyclerView 항목 위치를 setArguments가 포함 된 번들로 전달하려고합니다. Android Studio는 "bundle.putInt"행에 다음 오류를 표시합니다. 잘못된 두 번째 인자 유형. Found : '연락처'(내 데이터 모델), 'int'가 필요합니다. 내가 여기서 무엇을 놓치고 있니?

p.s. 나는 또한 "ActActivity"라는 또 다른 Activity를 정확하게로드하는 "onItemClick"메소드를 가지고있다. onItemClick 및 onItemLongClick은 Adapter 파일의 ClickListener 인터페이스로 설정됩니다. 두 가지 클릭 방법 모두 토스트를 사용하여 테스트되었으며 정상적으로 작동합니다. 활동 파일에서

: RecyclerView의 어댑터 파일에서

... 
@Override 
public void onItemLongClick(int position, View view) { 
    // For API >=14, use getFragmentManager() below. 
    Bundle bundle = new Bundle(); 
    bundle.putInt("item position", **contactListAdapter.getItem(position)**); // error here. 

    android.app.FragmentManager fm = getFragmentManager(); 
    fm.setArguments(bundle); 
    DeleteCardViewFragment delCardViewDialog = new DeleteCardViewFragment(); 
    delCardViewDialog.show(fm,"delcardview dialog"); 
} 

@Override 
public void onItemClick(int position, View view) { 
    ActActivity.start(this, contactListAdapter.getItem(position)); 
} 

:

public class ContactListAdapter extends RecyclerView.Adapter<ContactListAdapter.ContactHolder>{ 

    private List<Contact> contactList; 
    private Context context; 

    private RecyclerItemClickListener recyclerItemClickListener; 

    public ContactListAdapter(Context context) { 
     this.context = context; 
     this.contactList = new ArrayList<>();  
    ... 

    **public Contact getItem(int position)** { 
     return contactList.get(position); 
    } 

조각 파일 :

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) {  
... 
Button btnOK = (Button) rootView.findViewById(R.id.btnOK); 
    btnOK.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
             // removeItem() here? 
      dismiss(); 
     } 
    }); 
+0

하지만'onItemLon gClick (int position, View view)'를 첫 번째 인수로 사용하기 때문에 –

+0

은 'contactListAdapter.getItem (position)'을 'position'으로 바꿉니다. – AJW

+0

여기서 조각 또는 활동 목록의 데이터를 설정하고 있습니까? –

답변

0

bundle.putInt 기능은 두번째 인수에 정수를 기대하고, 너는 '접촉'안에있다. 대신 'contactListAdapter.getItem (위치)'

+0

좋습니다. 시도해 보겠습니다. 이제 "fm.setArgments (번들);" 오류를 표시하고 있습니다 : 메서드를 해결할 수 없습니다. 어떤 아이디어? – AJW

1

의 2 인자로 패스 '위치'

public class MainActivity extends AppCompatActivity implements View.OnLongClinkListner { 
@Override 
    public boolean onLongClick(View v) { 
int position=(Integer)v.getTag(); 
     return false; 
    } 
} 



public void remove(int position){ 
    adapter.remove(position); 
} 

그리고 어댑터에 View.OnLongClinkListner

를 구현하는 활동을 확인

View.OnLongClinkListner mLongClickListner; 
public ContactListAdapter(Context context) { 

mLongClickListner=(View.OnLongClinkListner)context; 
} 

@Override 
     public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = inflater.inflate(R.layout.some_layout, parent, false); 
view.setOnLongClickListner(mLongClickListner); 
      return new ContactHolder(view); 
     } 



@Override 
     public void onBindViewHolder(final ContactHolder holder, final int position) { 
... your code; 
holder.itemView.setTag(position); 
} 

//를 사용하여 recycler-view에서 항목을 제거하십시오.

public void removeItem(int position) 
{ 
contactList.remove(position); 
notifyDataSetChanged(); 
} 
+0

흥미 롭 군, 나는 그것을 시도 할 것이다. DialogFragment를 시작하는 코드가 'public boolean onLongClick 섹션에 추가됩니까?' – AJW

+0

예'''DialogFragment frag = new DialogFragment(); 번들 args = new Bundle(); args.putInt ("pos", position); frag.setArguments (args);''' 이제 조각을 보여줍니다. –

+0

확인. 그런 다음 어떻게 삭제 코드를 추가 할 수 있도록 조각의 어댑터에서 항목 위치를 참조합니까? – AJW

관련 문제