내 응용 프로그램은 일부 활동에만 탐색 드로어를 사용합니다. 각 액티비티에서 코드를 복제하는 대신 확장 된 기본 액티비티를 수정하여 탐색 서랍 코드가 한 위치에 있도록합니다. 문제는 onItemClick
메서드가 작업에 따라 달라진다는 것입니다. 예를 들어, MainActivity
에서 "집"을 누르면 우리는 이미 "집"에 있기 때문에 아무것도하지 않아야합니다. ListActivity
에서 "집"을 누르면 MainActivity
으로 이동해야합니다.하위 클래스에서 수퍼 클래스로 정보를 전달하여 NavigationDrawer onItemClick 구현을 결정합니다.
(더 많은 정보는 내 자신의 질문에 대한 대답은 here을 참조하십시오. 사용자가 멀리 이동할 때 각 활동을 완료하고 추가 활동을 전달하여 다음 활동에 호출 활동이 무엇인지 알려줍니다.) 사용자가 장치 뒤로 버튼을 통해 반환 할 때 서랍 닫는 애니메이션을 피하기 위해 수행됩니다. 이렇게하면 활동이 다시 시작 되었기 때문에 서랍이 애니메이션없이 닫힙니다.
어떻게 할 수 있습니까? 수퍼 클래스에 필요한 정보를 얻으시겠습니까? 수퍼 클래스에 일종의 정보를 전달하기 위해 각각의 서브 클래스가 필요할 것이다. 어쩌면 각 서브 클래스가 자신을 식별하는 int를 수퍼 클래스에 전달할 수 있으며 수퍼 클래스는 해당 int를 사용하여 각 경우에 무엇을 할 것인지 결정할 수 있습니다. 나는 그것이 가능하다면 어떻게 할 지 모르겠다.
가능한 슈퍼 클래스 BaseActivity
구현 :
mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView parent, View view, int position, long id)
{
//passedParameter is an int that the subclass passes to the superclass to identify itself
switch(int passedParameter)
{
//int passed from subclass identifies it as MainActivity
case MAIN_ACTIVITY:
{
switch(position)
{
//HOME
case 0:
//do nothing since we're already at MainActivity/home
//LIST
case 1:
//go to ListActivity
}
}
//int passed from subclass identifies it as ListActivity
case LIST_ACTIVITY:
{
switch(position)
{
//HOME
case 0:
//go to MainActivity
//LIST
case 1:
//do nothing since we're already at ListActivity
}
}
}
}
});
가 어떻게 슈퍼 클래스의 서브 클래스에서 필요한 int
을 통과 할 수 있을까?
BaseActivity
추상입니다 :
public abstract class BaseActivity extends FragmentActivity
{
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
//navigation drawer code shown above, plus more
if (fragment == null)
{
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer, fragment)
.commit();
}
}
}
그리고 서브 클래스는이 구현해야합니다 :
public class MainActivity extends BaseActivity
{
//how to pass some parameter to BaseActivity from here?
@Override
protected Fragment createFragment()
{
return new MainFragment();
}
}
내가 불분명 오전 알려 주시기 바랍니다. 어떤 도움을 주셔서 감사합니다. 감사!
감사합니다. 서브 클래스는'onItemClick'을 구현하지 않을 것이지만, 그 코드는 수퍼 클래스에서만 호출 될 것이고 따라서 하나 이상의 클래스에서 그것을 복제 할 필요가 없다. 다른 방법으로 정보를 전달할 수 있습니까? – pez
전달하려는 정보는 무엇입니까? 보호 된 변수 (또는 메서드)를 사용하는 것이 가장 좋은 방법이라고 생각합니다. –
단순한 int를 전달하면 충분하다고 생각합니다. 예를 들어,'MainActivity'에는 0을,'ListActivity'에는 1을 전달합니다. 그런 다음 수퍼 클래스의 onItemClick 메서드에서 첫 번째 switch 문에서 전달 된 매개 변수를 전환하여 수행 할 작업을 결정할 수 있습니다. 내 질문을 편집 할게 – pez