2016-11-24 1 views
1

Я хочу использовать кнопку для разных вызовов в разных классах. Однако, когда я объявляю и пытаюсь вызвать метод Click Button в классе Activity, он выдает исключение null. В моем классе я хочу сделать это:Могу ли я объявить и использовать ту же кнопку в Управлении и классе?

public class CustomFeedListViewAdapter extends BaseAdapter { 


     holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton); 

     holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        //do stuff 

        } 
        }); 


    private class ViewHolder { 

    Button feedUpVoteButton; 

} 

И в моей основной деятельности я хочу сделать это:

public class Feed extends AppCompatActivity { 

Button upVoteButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_feed); 

     upVoteButton = (Button) findViewById(R.id.feedUpVoteButton); 

    feedUpVoteButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       //do stuff 

       } 
       }); 


    } 
} 
+0

Без проблем вы можете. –

+0

У вас есть идеи, почему я получаю ошибку null для моего метода 'button.setOnClick' в моей MainActivity? – grant

+0

Пожалуйста, делите activity_feed. –

ответ

0

Вы получаете NullPointerException, потому что вы пытаетесь получить доступ feedUpVoteButton который присутствует в item layout, используемом в CustomFeedListViewAdapter, а не в макете, используемой операцией Feed.

вы хотите иметь доступ к ClickListener всякий раз, когда вы создаете адаптер типа CustomFeedListViewAdapter ли? Если да, то это сделать ...

Вашего активность класса

public class Feed extends AppCompatActivity { 

    CustomFeedListViewAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_feed); 

     adapter = new CustomFeedListViewAdapter(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // Handle click here 
      } 

     }); 

    } 
} 

И ваш пользовательского адаптер класса

public class CustomFeedListViewAdapter extends BaseAdapter { 

    View.OnClickListener clickListener; 

    // Constructor 
    public CustomFeedListViewAdapter(View.OnClickListener listener) { 
     clickListener = listener; 
    } 

    @Override 
    void getView(){ 

     holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton); 

     holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       //do stuff 

      } 
     }); 
    } 

} 

Таким образом, вы можете установить другой слушателя для каждого экземпляра создаваемого адаптера.

Смежные вопросы