2017-01-05 1 views
0

활동에 recyclerview가있는 앱을 만들고 있습니다. 목록에있는 항목을 클릭하면 축배를 얻으려고합니다. StackOverflow에서 다양한 솔루션을 보았지만 도움이되지 않습니다.토스트 내부 onclick recyclerview

BasicsAdapter.java

public class BasicsAdapter extends RecyclerView.Adapter<BasicsAdapter.MyViewHolder> { 

    private List<Basic> basicsList; 

    public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     public TextView title; 

     public MyViewHolder(View view){ 
      super(view); 
      title = (TextView)view.findViewById(R.id.title); 
     } 

     @Override 
     public void onClick(View v) { 

     } 
    } 

    public BasicsAdapter(List<Basic> basicsList){ 
     this.basicsList = basicsList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.basic_list_row, parent, false); 

     itemView.setClickable(true); 
     itemView.setOnClickListener(true); 
     //itemView.setFocusableInTouchMode(true); //dont enable this 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     Basic basic = basicsList.get(position); 
     holder.title.setText(basic.getTitle()); 
    } 

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

basics_list.java

public class basics_list extends AppCompatActivity { 
    private DrawerLayout mDrawerLayout; 
    private List<Basic> basicList = new ArrayList<>(); 
    private RecyclerView recyclerView; 
    private BasicsAdapter mAdapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTitle(R.string.basics_list_name); 
     setContentView(R.layout.activity_basics_list); 

     // Adding Toolbar to Main screen 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     /*ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); */ 

     // set recycler view 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     mAdapter = new BasicsAdapter(basicList); 
     final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     prepareBasicsData(); 

     // Create Navigation drawer and inflate layout 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer); 

// Adding menu icon to Toolbar 
     ActionBar supportActionBar = getSupportActionBar(); 
     if (supportActionBar != null) { 
      supportActionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp); 
      supportActionBar.setDisplayHomeAsUpEnabled(true); 
     } 

// Set behavior of Navigation drawer 
     navigationView.setNavigationItemSelectedListener(
       new NavigationView.OnNavigationItemSelectedListener() { 
        // This method will trigger on item Click of navigation menu 
        @Override 
        public boolean onNavigationItemSelected(MenuItem menuItem) { 
         // Set item in checked state 
         menuItem.setChecked(true); 
         // TODO: handle navigation 
         // Closing drawer on item click 
         mDrawerLayout.closeDrawers(); 
         return true; 
        } 
       }); 


    } 

    private void prepareBasicsData() { 
     Basic basic = new Basic("Introduction to Linux"); 
     basicList.add(basic); 

     basic = new Basic("What is The Terminal"); 
     basicList.add(basic); 

     basic = new Basic("Programmers guide"); 
     basicList.add(basic); 

     mAdapter.notifyDataSetChanged(); 
    } 
} 
+0

어디 토스트 메시지가 코드에? –

+0

나는 그것을 제거했다. 제가 시도한 것은 없습니다. getApplicationContext 또는 getBaseContext가 유효하지 않습니다. "this"가 포함 된 액티비티를 사용하지 못했습니다. –

+1

클래스의 생성자 중 하나로서'Context'를 추가하면 액티비티에서 클래스를 초기화 할 때 "this"를 전달하면 컨텍스트가 생깁니다. –

답변

4

사용 itemView.setOnClickListener(new View.OnClickListener() {}) 대신 itemView.setOnClickListener(true).

이렇게하면 OnClickListener을 직접 적용 할 수 있습니다. 다음과 유사합니다.

itemView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void OnClick(View view) { 
     Toast.makeText(view.getContext(), "Item is clicked", Toast.LENGTH_SHORT).show(); 
    } 
}); 

그리고 생성자에 넣을 수 있습니다.

+1

사실 그는 뷰 참조를 가지고 있으며 컨텍스트를 가져올 수 있습니다. 그렇다면 왜 그가 활동이 필요합니까? –

+1

또한 왜 onCreateViewHolder() 내부에서 리스너를 설정해야하는지, 뷰 홀더 생성자 내에서이 작업을 수행해야합니다. –

+1

위의 "LENGHT.SHORT"에 대한 사소한 수정 : 대신 "Toast.LENGTH_SHORT"를 사용하십시오. – AJW

0

ViewHolderOnClickListener을 설정하면됩니다.

공용 클래스 BasicsAdapter는 RecyclerView.Adapter가 {

private List<Basic> basicsList; 

public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
    public TextView title; 

    public MyViewHolder(View view){ 
     super(view); 
     view.setOnClickListener(new View.OnClickListener() { 
      Toast.makeText(view.getContext(), "Item is clicked", LENGHT.SHORT).show(); 
     }); 
     title = (TextView)view.findViewById(R.id.title); 
    } 

} 

public BasicsAdapter(List<Basic> basicsList){ 
    this.basicsList = basicsList; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.basic_list_row, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    Basic basic = basicsList.get(position); 
    holder.title.setText(basic.getTitle()); 
} 

@Override 
public int getItemCount() { 
    return basicsList.size(); 
} 
} 
+0

위의 "LENGHT.SHORT"에 대한 사소한 수정 : 대신 "Toast.LENGTH_SHORT"를 사용하십시오. – AJW

0

이 당신을 도울 수 확장 :

public class BasicsAdapter extends RecyclerView.Adapter<BasicsAdapter.MyViewHolder> { 

private List<Basic> basicsList; 

public static class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title; 
    Context context; 

    public MyViewHolder(View view){ 
     super(view); 
     title = (TextView)view.findViewById(R.id.title); 
    } 
} 

public BasicsAdapter(Context context,List<Basic> basicsList){ 
    this.context=context; 
    this.basicsList = basicsList; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.basic_list_row, parent, false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    Basic basic = basicsList.get(position); 
    holder.title.setText(basic.getTitle()); 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     Toast.makeText(context,"Show your text here",Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return basicsList.size(); 
} 
} 
관련 문제