2014-12-26 3 views
4

Я хочу использовать ViewStub с ножом для масла, Это то, что я сделал:Как вводить ViewStub с ButterKnife?

public class ExampleFragment extends Fragment { 

    @InjectView (R.id.stub) 
    ViewStub mStub; 

    /* A TextView in the ViewStub */ 
    @InjectView (R.id.text) 
    @Optional 
    TextView mText; 

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

     View rootView = inflater.inflate (R.layout.rootview, container, false); 
     ButterKnife.inject (this, rootView); 

     mStub.setLayoutResource (R.layout.stub_layout); 
     View inflated = mStub.inflate(); 
     ButterKnife.inject (mStub, inflated); 

     mText.setText("test.");  

     return rootView; 
    } 
} 

и журнал говорит:

mText is a null object reference

Я понятие не имею сейчас, любой совет приветствуется. Благодаря!

+1

Попробуйте 'View inflated = mStub.inflate(); ButterKnife.inject (this, inflated); ' –

+0

@NikolaDespotoski Я пробовал, и эта инъекция заменила первую инъекцию' ButterKnife.inject (this, rootView); ', поэтому' mStub' становится нулевым. Теперь я использую 'TextView mText = (TextView) inflated.findViewById (R.id.text);' вместо :(Спасибо в любом случае! – RockerFlower

+0

@RockerFlower, зачем вам нужен объект ViewStub после загрузки его компоновки? – Renascienza

ответ

3

Вот ответ от Джейка для этого запроса:

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

Код ссылки: Github.

6

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

public class ExampleFragment extends Fragment { 

    @InjectView (R.id.stub) 
    ViewStub mStub; 

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

     View rootView = inflater.inflate (R.layout.rootview, container, false); 
     ButterKnife.inject (this, rootView); 

     mStub.setLayoutResource (R.layout.stub_layout); 
     View inflated = mStub.inflate(); 
     MyStubView stubView = new MyStubView(inflated); 
     stubView.mText.setText("test.");  

     return rootView; 
    } 

    // class (inner in this example) that has stuff from your stub 
    public class MyStubView { 
     @InjectView(R.id.text) 
     TextView mText; 

     public MyStubView(View view) { 
      Butterknife.inject(this, view); 
     } 
    } 
} 
Смежные вопросы