2017-04-24 47 views
0

作为noob开发人员,我开发了一个使用recyclerview填充卡片的flashcards应用程序。问题是当我使用FAB添加新卡时,我刷新了主要活动。在这里我发现,当我点击任何卡时,它不会显示任何数据。调试显示,recyclerview片段中onClick(int position)的位置增加了之前的卡片大小,因此无法查看数据。如何获得正确的onClick位置?请帮助..Android:Recyclerview onClick(int position)在刷新时添加到之前的位置

public class CardFragment extends Fragment { 
public static List<String> QArray = new ArrayList<>(); 
public CardFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    final OnSelectFlashListner mCallback = null; 

    // Inflate the layout for this fragment 
    final RecyclerView flashRecycler = (RecyclerView) inflater.inflate(R.layout.recy_view , container, false); 

    try{ 
     SQLiteOpenHelper flashCardsHelper1 = new FlashCardsHelper(getContext()); 
     SQLiteDatabase db = flashCardsHelper1.getReadableDatabase(); 
     Cursor cursor = db.query("Flashdata",new String[]{"question", "answer"},null,null,null,null,null); 
     Log.d("Flash data", DatabaseUtils.dumpCursorToString(cursor)); 

     if (cursor.moveToFirst()){ 
      do { 
       QArray.add(cursor.getString(0)); 
      }while (cursor.moveToNext()); 
     } 
     cursor.close(); 
     db.close(); 

    }catch (Exception e){ 
     e.printStackTrace(); 
    } 

    flashAdapter flashAdap = new flashAdapter(QArray); 
    flashRecycler.setAdapter(flashAdap); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
    flashRecycler.setLayoutManager(linearLayoutManager); 

    flashAdap.setListner(new flashAdapter.Listner(){ 

     @Override 
     public void onClick(int position) { 
      Intent intent = new Intent(getActivity(),FlashCardOpen.class); 
      intent.putExtra(FlashCardOpen.EXXTRA_QUESTIONNO,position); 
      getActivity().startActivity(intent); 
     } 
    }); 
    Button button = (Button)flashRecycler.findViewById(R.id.btn_Add); 

    return flashRecycler; 
} 

IM通过FAB刷新主要活动:

private void loadFAB() { 
    FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Dialog dialog = new Dialog(context); 
      dialog.setContentView(R.layout.dialog_box); 
      dialog.setTitle("Add Flash Card"); 

      final EditText textViewQues = (EditText)dialog.findViewById(R.id.et_dialogQuestion); 
      final EditText textViewAns = (EditText)dialog.findViewById(R.id.et_dialogAnswer); 
      Button btn_cancel = (Button)dialog.findViewById(R.id.btn_cancel); 
      btn_cancel.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dialog.dismiss(); 
       } 
      }); 
      Button btn_add = (Button)dialog.findViewById(R.id.btn_Add); 
      btn_add.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        writeToDb(textViewQues.getText().toString(),textViewAns.getText().toString()); 
        showNotif(); 
        Intent intent = new Intent(context,MainActivity.class); 
        context.startActivity(intent); 
        dialog.dismiss(); 
       } 
      }); 
      dialog.show(); 
     } 
    }); 

} 

回答

0

事实证明,这是没有问题的。我正在填充一个数组列表,该数组列表将整个列表添加到前一个列表的顶部。我简单地在视图onCreateView()开头添加了array.clear(),问题就解决了。 调试规则!

相关问题