2016-01-20 1 views

ответ

3

если вы пишете:

b=(Button) findViewById(R.id.mybutton); 

это использовать непосредственно в макет

, но если вы пишете:

b= (Button) view.findViewById(R.id.mybutton); 

этого использование для макета раздувания (пользовательский макет)

, например, в: Пользовательские Dialog

пользовательского макета для Listview, который распространяется на BaseAdapter, ArrayAdapter, .... и для подключения к Layoutinflater

0
if you declare button directly from your layout you write this: 
    b= (Button) findViewById(R.id.mybutton); 
else if you inflate any layout to your activity you should write this: 
View view; 
LayoutInflater subCatHead = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = subCatHead.inflate(R.layout.sub_cat_headerlyt, null); 

    b= (Button) view.findViewById(R.id.mybutton); 
0

В вашей деятельности, если вы объявите кнопку прямо написать это:

button = (Button) findViewById(R.id.mybutton); 

В случае пользовательского адаптера еще если вы раздуваете какой-либо макет для своей деятельности, напишите это:

button = (Button) view.findViewById(R.id.mybutton); 

В пользовательском массиве адаптере

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = inflater.inflate(R.layout.blog_stage_item, parent, false); 
     mStageListModel = null; 
     mStageListModel = (BlogStageDetailDTO) data.get(position); 

     TextView label = (TextView) row.findViewById(R.id.txt_spinner_item); 

     // Set values for spinner each row 
     label.setText(mStageListModel.getStage_name()); 



     return row; 
    } 
0

при использовании непосредственно активности Layout затем используйте

button = (Button) findViewById(R.id.mybutton); 

и когда Использовать пользовательский макет как Base adapter, Arrayadapter, Fragment вы должны пройти основной вид контейнера, как и называется

button = (Button) view.findViewById(R.id.mybutton); 
2
findViewById 

- это способ. Иногда вы можете ссылаться, как это:

b=(Button) findViewById(R.id.mybutton); 

который является сокращением для этого:

b=(Button) this.findViewById(R.id.mybutton); 

Среда IDE (Android Studio или любой другой) понимает, что findViewById является метод, потому что она вызывается в объекте, имеет (или «реализует») этот метод. Однако это метод, который реализует множество объектов. Итак, если вы хотите «найти представление с помощью« R »id, иногда вы хотите найти его с другого объекта, кроме того, который выполняет вызов.

Например, Activity реализует этот метод. Но если у вас есть в Activity в View (например, строки в списке), и вы хотите, чтобы извлечь значения из этой строки, вы могли бы сделать что-то вроде:

b=(Button) myRowView.findViewById(R.id.mybutton); 

В этом случае myRowView что-то на экране который должен иметь кнопку с идентификатором «mybutton».Если вы не сообщите IDE/компилятору проверить «строку» внутри Activity, тогда предполагается, что вы пытаетесь найти представление, которое непосредственно определено в Activity. Это может сработать, но если у вас есть 50 строк, и у всех из них есть кнопки с одинаковым идентификатором, вы, вероятно, не получите правильный ... но когда вы укажете , какую строку, указав объект, вы получите правильный.

Ключ здесь в том, что метод можно назвать без ключевого слова this, и поэтому он временами выглядит «волшебным».

0

b = (кнопка) view.findViewById (R.id.mybutton); используется, когда вы используете компоновку надувателя или пытаетесь получить доступ к виджету во фрагменте, так как фрагмент не имеет прямой информации о представлении. Сначала нужно получить информацию о корневом представлении.

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