0

firebase에서 앱의 데이터를 RecyclerView으로 검색하려고 할 때이 메시지가 logcat에 표시되고 앱이 다운됩니다. 아래 firebase 데이터베이스에서 데이터를 검색하는 데 사용하고있는 내 Java 코드입니다. 앱이 빈 화면을 표시하고 있으며 실제 기기에서 열면 항상 충돌합니다. 이것을 할 수있는 다른 방법이 있습니까?firebase 데이터베이스에서 Recyclerview로 데이터를 가져 오는 중 앱이 중단됨

는 안드로이드 4.1 전에 방법 INT android.support.v7.widget.ListViewCompat.lookForSelectablePosition (INT, 부울) 잘못

android.widget.ListView

에서 패키지 민간 방법 를 무시했을 것
public class Home extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    FirebaseDatabase database; 
    DatabaseReference category; 
    TextView txtFullName; 

    RecyclerView recycler_menu; 
    RecyclerView.LayoutManager layoutManager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     toolbar.setTitle("Menu"); 

     setSupportActionBar(toolbar); 

     //init firebase 
     database=FirebaseDatabase.getInstance(); 
     category=database.getReference("category"); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     // Set name for user 
     View headerView=navigationView.getHeaderView(0); 
     txtFullName=(TextView)headerView.findViewById(R.id.txtFullName); 
     txtFullName.setText(Common.currentUser.getName()); 

     //load menu 
recycler_menu=(RecyclerView)findViewById(R.id.recycler_menu); 
     recycler_menu.setHasFixedSize(true); 
     layoutManager=new LinearLayoutManager(this); 
     recycler_menu.setLayoutManager(layoutManager); 
     loadMenu(); 
    } 

    private void loadMenu() { 
     FirebaseRecyclerAdapter<Category,MenuViewHolder> adapter=new FirebaseRecyclerAdapter<Category, MenuViewHolder>(Category.class,R.layout.menu_item,MenuViewHolder.class,category) { 
      @Override 
      protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) { 
       viewHolder.txtMenuName.setText(model.getName()); 
       Picasso.with(getBaseContext()).load(model.getImage()) 
         .into(viewHolder.imageView); 

       final Category clickItem=model; 
       viewHolder.setItemClickListener(new ItemClickListener() { 
        @Override 
        public void onClick(View view, int position, boolean isLongClick) { 
         Toast.makeText(Home.this,""+clickItem.getName(),Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     }; 
     recycler_menu.setAdapter(adapter); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.home, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_menu) { 
      // Handle the camera action 
     } else if (id == R.id.nav_cart) { 

     } else if (id == R.id.nav_orders) { 

     } else if (id == R.id.nav_log_out) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 
+0

당신이 세트를 추가 할 수 있습니다 귀하의 recyclerview이 어댑터를 사용하는 당신은 recyclerview에 대한 코드를 가지고 있습니까? –

+0

나는 자바 코드로 내 질문을 편집했다. –

답변

0

봅니다

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.firebase.database.ChildEventListener; 
import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 

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

import illumine.ibecome.R; 

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> { 

    private Context mContext; 
    private DatabaseReference mDatabaseReference; 
    private ChildEventListener mChildEventListener; 

    private List<String> mCommentIds = new ArrayList<>(); 
    private List<MyModel> mComments = new ArrayList<>(); 
    private static final String TAG = "ActivityName"; 

    public MyRecyclerViewAdapter(final Context context, DatabaseReference ref) { 
     mContext = context; 
     mDatabaseReference = ref; 

     ChildEventListener childEventListener = new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { 

       // A new comment has been added, add it to the displayed list 
       MyModel comment = dataSnapshot.getValue(MyModel.class); 
//    Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey()+" with module: "+comment.modules.get(0)); 
       // [START_EXCLUDE] 
       // Update RecyclerView 

       mCommentIds.add(dataSnapshot.getKey()); 
       mComments.add(comment); 
       notifyItemInserted(mComments.size() - 1); 

      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) { 
       Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey()); 
       // A comment has changed, use the key to determine if we are displaying this 
       // comment and if so displayed the changed comment. 
       MyModel newComment = dataSnapshot.getValue(MyModel.class); 

       String commentKey = dataSnapshot.getKey(); 

       // [START_EXCLUDE] 
       int commentIndex = mCommentIds.indexOf(commentKey); 
       if (commentIndex > -1) { 
        // Replace with the new data 
        mComments.set(commentIndex, newComment); 

        // Update the RecyclerView 
        notifyItemChanged(commentIndex); 
       } else { 
        Log.w(TAG, "onChildChanged:unknown_child:" + commentKey); 
       } 
       // [END_EXCLUDE] 
      } 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 
       Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey()); 

       // A comment has changed, use the key to determine if we are displaying this 
       // comment and if so remove it. 
       String commentKey = dataSnapshot.getKey(); 

       // [START_EXCLUDE] 
       int commentIndex = mCommentIds.indexOf(commentKey); 
       if (commentIndex > -1) { 
        // Remove data from the list 
        mCommentIds.remove(commentIndex); 
        mComments.remove(commentIndex); 

        // Update the RecyclerView 
        notifyItemRemoved(commentIndex); 
       } else { 
        Log.w(TAG, "onChildRemoved:unknown_child:" + commentKey); 
       } 
       // [END_EXCLUDE] 
      } 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) { 
       Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey()); 


      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.w(TAG, "postComments:onCancelled", databaseError.toException()); 
       Toast.makeText(mContext, "Failed to load interventions.", 
         Toast.LENGTH_SHORT).show(); 
      } 
     }; 
     ref.addChildEventListener(childEventListener); 
     // [END child_event_listener_recycler] 

     // Store reference to listener so it can be removed on app stop 
     mChildEventListener = childEventListener; 
    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(mContext); 
     View view = inflater.inflate(R.layout.item_view, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     MyModel comment = mComments.get(position); 

     holder.name_tv.setText(comment.name); 
     holder.details_tv.setText(comment.description); 
    } 

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

    public void cleanupListener() { 
     if (mChildEventListener != null) { 
      mDatabaseReference.removeEventListener(mChildEventListener); 
     } 
    } 
    public MyModel getItem(int position){ 
     return mComments.get(position); 
    } 
    public class ViewHolder extends RecyclerView.ViewHolder { 
     TextView name_tv,details_tv; 
     View parent; 

     public ViewHolder(View rootView) { 
      super(rootView); 

      parent = rootView; 

      name_tv= (TextView) rootView.findViewById(R.id.name_tv); 
      details_tv = (TextView)rootView.findViewById(R.id.details_tv); 

     } 
    } 
}