자바에 익숙하지 않아서 가장 안타까운 두려움이 있었고 해석 방법을 모른다는 오류가 발생했을 때 처음으로 안드로이드 응용 프로그램의 마무리가 가까워졌습니다. .단편 목록 및 활동이있는 클래스 캐스트 예외
앱의 기본 기능은 서랍 메뉴에서 선택된 5 개의 목록입니다. 각 목록은 내용이있는 정적 XML보기를 엽니 다. 이 모든 것이 인물 사진에서 부드럽게 작동합니다. 가로보기에서보기는 왼쪽에 목록이 있고 오른쪽에 내용이있는 이중창입니다. 거기에 도착하는 것도 괜찮습니다. 그러나 한 목록에서 가로로 갈 때 오류가 발생하고 나중에 다른 목록에서 가로 질러 가려고합니다. 누군가 일어나고있는 일을 알아 내도록 도와 주시겠습니까?
주요 활동 목록 조각의
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
public class MainActivity extends SherlockFragmentActivity {
Fragment rotcfraglist = new RotcFragList();
Fragment afafraglist = new AfaFragList();
Fragment bmtfraglist = new BmtFragList();
Fragment docsfraglist = new DocsFragList();
Fragment extrafraglist = new ExtraFragList();
.... *drawer set up stuff ....
// ListView click listener in the navigation drawer
private class DrawerItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
selectItem(position);
}
}
private void selectItem(int position) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
View fullFrame = findViewById(R.id.full_frame);
View detailsFrame = findViewById(R.id.details);
View listFrame = findViewById(R.id.list_frame);
// Destroy Backstack first
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
// Locate Position
switch (position) {
///ROTC
case 0:
ft.remove(docsfraglist);
ft.remove(extrafraglist);
if (fullFrame != null && fullFrame.getVisibility() == View.VISIBLE) {
fullFrame.setVisibility(View.GONE);
}
if (detailsFrame != null
&& detailsFrame.getVisibility() == View.GONE) {
detailsFrame.setVisibility(View.VISIBLE);
}
if (listFrame != null && listFrame.getVisibility() == View.GONE) {
listFrame.setVisibility(View.VISIBLE);
}
ft.replace(R.id.list_frame, rotcfraglist);
break;
///AFA
case 1:
ft.remove(docsfraglist);
ft.remove(extrafraglist);
if (fullFrame != null && fullFrame.getVisibility() == View.VISIBLE) {
fullFrame.setVisibility(View.GONE);
}
if (detailsFrame != null
&& detailsFrame.getVisibility() == View.GONE) {
detailsFrame.setVisibility(View.VISIBLE);
}
if (listFrame != null && listFrame.getVisibility() == View.GONE) {
listFrame.setVisibility(View.VISIBLE);
}
ft.replace(R.id.list_frame, afafraglist);
break;
///BMT
case 2:
ft.remove(docsfraglist);
ft.remove(extrafraglist);
if (fullFrame != null && fullFrame.getVisibility() == View.VISIBLE) {
fullFrame.setVisibility(View.GONE);
}
if (detailsFrame != null
&& detailsFrame.getVisibility() == View.GONE) {
detailsFrame.setVisibility(View.VISIBLE);
}
if (listFrame != null && listFrame.getVisibility() == View.GONE) {
listFrame.setVisibility(View.VISIBLE);
}
ft.replace(R.id.list_frame, bmtfraglist);
break;
///Docs
case 3:
ft.remove(rotcfraglist);
ft.remove(afafraglist);
ft.remove(bmtfraglist);
if (detailsFrame != null
&& detailsFrame.getVisibility() == View.VISIBLE) {
detailsFrame.setVisibility(View.GONE);
}
if (fullFrame != null && fullFrame.getVisibility() == View.GONE) {
fullFrame.setVisibility(View.VISIBLE);
}
if (listFrame != null && listFrame.getVisibility() == View.VISIBLE) {
listFrame.setVisibility(View.GONE);
}
ft.replace(R.id.full_frame, docsfraglist);
break;
///Extra
case 4:
ft.remove(rotcfraglist);
ft.remove(afafraglist);
ft.remove(bmtfraglist);
if (detailsFrame != null
&& detailsFrame.getVisibility() == View.VISIBLE) {
detailsFrame.setVisibility(View.GONE);
}
if (fullFrame != null && fullFrame.getVisibility() == View.GONE) {
fullFrame.setVisibility(View.VISIBLE);
}
if (listFrame != null && listFrame.getVisibility() == View.VISIBLE) {
listFrame.setVisibility(View.GONE);
}
ft.replace(R.id.full_frame, extrafraglist);
break;
}
ft.commit();
mDrawerList.setItemChecked(position, true);
// Get the title followed by the position
setTitle(title[position]);
// Close drawer
mDrawerLayout.closeDrawer(mDrawerList);
}
한
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.SherlockListFragment;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class BmtFragList extends SherlockListFragment {
boolean mDualPane;
static int mCurCheckPosition = 0;
public final String [] TITLES = {
"Core Values",
"AF Mission",
"Airman's Creed",
"Air Force Song",
"Ranks AF Enlisted",
"Ranks AF Officer",
"Chain of Command",
"Reporting Statement",
"Phonetic Alphabet"
};
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.simple_list_item_checkable_1, android.R.id.text1, TITLES));
// Check landscape or not
View detailsFrame = getActivity().findViewById(R.id.details);
mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE;
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
if (savedInstanceState != null) {
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
showDetails(mCurCheckPosition);
}
if (mDualPane) {
showDetails(mCurCheckPosition);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
showDetails(position);
}
// If landscape, replace details. If not, replace list.
void showDetails(int position) {
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
mCurCheckPosition = position;
if (mDualPane) {
getListView().setItemChecked(position, true);
BmtDetailsFragment details = (BmtDetailsFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.details);
if (details == null || details.getShownIndex() != position) {
details = BmtDetailsFragment.newInstance(position);
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
} else {
getListView().setItemChecked(position, true);
Intent intent = new Intent();
intent.setClass(getActivity(), DetailsActivity.class);
intent.putExtra("position", position);
startActivity(intent);
}
}
public static class DetailsActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(MainActivity.getThemeId());
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
finish();
return;
}
if (savedInstanceState == null) {
BmtDetailsFragment details = new BmtDetailsFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
}
}
}
public static class BmtDetailsFragment extends SherlockFragment {
public static BmtDetailsFragment newInstance(int position) {
BmtDetailsFragment f = new BmtDetailsFragment();
// Make index input an argument
Bundle args = new Bundle();
args.putInt("position", position);
f.setArguments(args);
return f;
}
public int getShownIndex() {
return getArguments().getInt("position", 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
View newContent = getView();
int position = getShownIndex();
switch (position) {
case 0:
newContent = inflater.inflate(R.layout.corevalues, container, false);
break;
case 1:
newContent = inflater.inflate(R.layout.afmission, container, false);
break;
case 2:
newContent = inflater.inflate(R.layout.airmanscreed, container, false);
break;
....more cases.....
}
return newContent;
}
}
}
주요 활동 풍경 레이아웃
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/full_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/list_frame"
android:layout_width="180dp"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/list_frame" >
</FrameLayout>
</RelativeLayout>
<ListView
android:id="@+id/listview_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#262626"
android:choiceMode="singleChoice"
android:divider="#5C5C5C"
android:dividerHeight="1dp" />
</android.support.v4.widget.DrawerLayout>
코드의 벽 죄송
를 로그 캣,하지만 난 정말 여기에 잃었어요. 내 생각 엔이 오류는 해당 프레임의 내용을 설정하는 각 클래스의 DetailsActivity를 가리키고 있기 때문에 목록 옆의 detailsframe과 관련이 있습니다. 새로운 세부 정보가 포함 된 새 목록을 같은 위치에로드하려면 먼저 프레임을 제거해야합니까? 나는 그것에 대해 어떻게 가야할지 모르겠다. 무엇이든지 도움을 주시면 대단히 감사하겠습니다 !!! 내 첫 번째 앱이 이런 식으로 떨어져 나가는 것을보고 싶지는 않습니다. 아플 생각합니다.