2015-06-08 1 views
3

В моем проекте я начал использовать RoboGuice. Я могу легко вводить представления внутри фрагментов и действий, но у меня есть некоторые проблемы с представлениями cusom. Каждый раз я получал исключение null ptr.Невозможно ввести представление в пользовательский класс с помощью RoboGuice

Согласно RoboGuice's example я сделал то же самое с моим пользовательский класс:

TestActivity

@ContentView(R.layout.test_layout) 
public class TestActivity extends RoboActivity { 

    @InjectView(R.id.testView_1) TestView testView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
} 

TestView XML

public class TestView extends LinearLayout { 


    @InjectView(R.id.log_in_tab) View logInTab; 

    public TestView(Context context) { 
     super(context); 
     initView(); 
    } 

    public TestView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initView(); 
    } 

    public TestView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initView(); 
    } 


    @Override 
    public void onFinishInflate() { 
     super.onFinishInflate(); 

     if (logInTab == null) 
      Toast.makeText(getContext(), "Still NULL", Toast.LENGTH_LONG).show(); 
     else 
      Toast.makeText(getContext(), "Ok", Toast.LENGTH_LONG).show(); 

    } 

    public void initView() { 

     inflate(getContext(), R.layout.login_view, this); 
     RoboGuice.injectMembers(getContext(), this); 
    } 


} 

Вход находится в pastebin here.

макет тест

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <view 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     class="hu.illion.kwindoo.view.test.TestView" 
     android:id="@+id/testView_1"/> 
</LinearLayout> 

Toast всегда говорит, что logInTab равна нулю.

Пожалуйста, помогите, если сможете.

+0

не видят 'R. id.log_in_tab' в вашем макете. –

+0

@JiangYD Это было в pastebin, но почему-то ссылка сломана, поэтому я редактирую сообщение. –

+0

@JiangYD Невозможно отредактировать сообщение, кнопка редактирования неактивна, не знаю почему. –

ответ

5

Я не знаю, почему нет примеров кода, но когда мне нужно вводить пользовательские представления, я использую addViewMembers.

Надежда эта работа для вас:

public void initView() { 
    inflate(getContext(), R.layout.login_view, this); 
    RoboGuice.injectMembers(getContext(), this); 
    RoboGuice.getInjector(getContext()).injectViewMembers(this); 
} 
+0

Хм-м, я тоже ничего подобного не видел, но это определенно работает. Спасибо, теперь время для сокращения базы кода, как ад :) –

1

В дополнение к предыдущему ответу, вы должны использовать следующий метод, чтобы фактически начать использовать инъекционные просмотров:

@Override 
protected void onFinishInflate() { 
    super.onFinishInflate(); 

    someTextView.setText("Some text"); 
} 

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

  • Нет связанных вопросов^_^