Как привязать прослушиватель Click к кнопке, добавленной из другого действия через Inflater в Android - PullRequest
0 голосов
/ 13 июня 2018

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

XML Layout

 <Button
     android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_alignParentRight="true"
                android:layout_marginEnd="8dp"
                android:layout_marginTop="15dp"
                android:background="@drawable/rounded_transparent_botton"
                android:textAllCaps="false"
                style="@style/transparentButton"
                android:text="Edit Profile"
                android:id="@+id/edit_profile"/>

Основная деятельность

   public class MainActivity extends BaseActivity implements View.OnClickListener{      

    Button edit_profile;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initAddLayout(R.layout.activity_profile);
    setActivityTitle(R.string.profile_activity_title);


    loadData();

    FontChangeCrawler fontChanger = new FontChangeCrawler(getAssets(), "fonts/Merriweather-Bold.ttf");
    fontChanger.replaceFonts((ViewGroup) this.findViewById(android.R.id.content));

    this.edit_profile = findViewById(R.id.edit_profile);
    this.edit_profile.setOnClickListener(this);
  }

  @Override
  public void onClick(View view) {
    if (view.getId()==R.id.edit_profile){
        Log.i("TAG", "PROFILE CLICKED");
    }
  }
}

BaseActivity.class

public class BaseActivity extends AppCompatActivity {   

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

  protected void initAddLayout(int layout) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(layout, null, false);
        ((FrameLayout) findViewById(R.id.main_content_below)).addView(view);

}
} 

кнопка edit_profile из основного действия отказывается принимать прослушиватель щелчков.

Суть расширения BaseActivity в MainActivity заключается в том, что BaseActivity содержит некоторые базовые функции, которые большинство действий унаследует

Макет для MainActivity загружен из BaseActivity с использованием initAddLayout метода BaseActivity

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 13 июня 2018

Вы можете добиться этого следующим образом:

public class BaseActivity extends AppCompatActivity {   
    protected View profileActivityView;
    ...
    protected void initAddLayout(int layout) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        final FrameLayout frameLayout = (FrameLayout)findViewById(R.id.main_content_below);
         profileActivityView = inflater.inflate(layout, frameLayout , false);
        frameLayout.addView(profileActivityView);

    }
}

MainActivity

public class MainActivity extends BaseActivity implements View.OnClickListener{      

    Button edit_profile;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initAddLayout(R.layout.activity_profile);
        setActivityTitle(R.string.profile_activity_title);

        ...

        this.edit_profile = profileActivityView.findViewById(R.id.edit_profile);
        this.edit_profile.setOnClickListener(this);
   }
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...