0

자바에 익숙하지 않아서 가장 안타까운 두려움이 있었고 해석 방법을 모른다는 오류가 발생했을 때 처음으로 안드로이드 응용 프로그램의 마무리가 가까워졌습니다. .단편 목록 및 활동이있는 클래스 캐스트 예외

앱의 기본 기능은 서랍 메뉴에서 선택된 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> 

코드의 벽 죄송

enter image description here

를 로그 캣,하지만 난 정말 여기에 잃었어요. 내 생각 엔이 오류는 해당 프레임의 내용을 설정하는 각 클래스의 DetailsActivity를 가리키고 있기 때문에 목록 옆의 detailsframe과 관련이 있습니다. 새로운 세부 정보가 포함 된 새 목록을 같은 위치에로드하려면 먼저 프레임을 제거해야합니까? 나는 그것에 대해 어떻게 가야할지 모르겠다. 무엇이든지 도움을 주시면 대단히 감사하겠습니다 !!! 내 첫 번째 앱이 이런 식으로 떨어져 나가는 것을보고 싶지는 않습니다. 아플 생각합니다.

답변

0

해결책을 찾아 냈습니다! 어쩌면 가장 예쁜 것은 아니지만 작동하며 충돌보다 낫습니다.

필자가 가지고있는 각 listfragment는 서로 가로로 컨텐츠 프레임을 "공유"하는 것을 원하지 않기 때문에 각 목록을 자체 프레임 레이아웃으로 작성하여 조각을 넣었습니다. 새 목록이 호출되면 다른 프레임 레이아웃의 가시성이 "사라짐"으로 설정되고 기본적으로 배경에 배치됩니다. 나중에 다시 전화 할 때, 그들은 이전 보류 한 내용을 보여 주며, 이것은 좋은 보너스입니다.

여기하여 MainActivity

// 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 detailsFrameRotc = findViewById(R.id.details_rotc); 
     View listFrame = findViewById(R.id.list_frame); 
     View detailsFrameAfa = findViewById(R.id.details_afa); 
     View detailsFrameBmt = findViewById(R.id.details_bmt); 

     // Destroy Backstack first 
     fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

     // Locate Position 
     switch (position) { 
     ///ROTC 
     case 0: 
      ft.replace(R.id.list_frame, rotcfraglist); 
      ft.remove(docsfraglist); 
      ft.remove(extrafraglist); 

      if (fullFrame != null && fullFrame.getVisibility() == View.VISIBLE) { 
       fullFrame.setVisibility(View.GONE); 
      } 
      if (detailsFrameAfa != null 
        && detailsFrameAfa.getVisibility() == View.VISIBLE) { 
       detailsFrameAfa.setVisibility(View.GONE); 
      } 
      if (detailsFrameBmt != null 
        && detailsFrameBmt.getVisibility() == View.VISIBLE) { 
       detailsFrameBmt.setVisibility(View.GONE); 
      } 
      if (detailsFrameRotc != null 
        && detailsFrameRotc.getVisibility() == View.GONE) { 
       detailsFrameRotc.setVisibility(View.VISIBLE); 
      } 
      if (listFrame != null && listFrame.getVisibility() == View.GONE) { 
       listFrame.setVisibility(View.VISIBLE); 
      } 

      break; 
     ///AFA 
     case 1: 
      ft.replace(R.id.list_frame, afafraglist); 
      ft.remove(docsfraglist); 
      ft.remove(extrafraglist); 

      if (fullFrame != null && fullFrame.getVisibility() == View.VISIBLE) { 
       fullFrame.setVisibility(View.GONE); 
      } 
      if (detailsFrameRotc != null 
        && detailsFrameRotc.getVisibility() == View.VISIBLE) { 
       detailsFrameRotc.setVisibility(View.GONE); 
      } 
      if (detailsFrameBmt != null 
        && detailsFrameBmt.getVisibility() == View.VISIBLE) { 
       detailsFrameBmt.setVisibility(View.GONE); 
      } 
      if (detailsFrameAfa != null 
        && detailsFrameAfa.getVisibility() == View.GONE) { 
       detailsFrameAfa.setVisibility(View.VISIBLE); 
      } 
      if (listFrame != null && listFrame.getVisibility() == View.GONE) { 
       listFrame.setVisibility(View.VISIBLE); 
      } 

      break; 
     ///BMT 
     case 2: 
      ft.replace(R.id.list_frame, bmtfraglist); 
      ft.remove(docsfraglist); 
      ft.remove(extrafraglist); 

      if (fullFrame != null && fullFrame.getVisibility() == View.VISIBLE) { 
       fullFrame.setVisibility(View.GONE); 
      } 
      if (detailsFrameAfa != null 
        && detailsFrameAfa.getVisibility() == View.VISIBLE) { 
       detailsFrameAfa.setVisibility(View.GONE); 
      } 
      if (detailsFrameRotc != null 
        && detailsFrameRotc.getVisibility() == View.VISIBLE) { 
       detailsFrameRotc.setVisibility(View.GONE); 
      } 
      if (detailsFrameBmt != null 
        && detailsFrameBmt.getVisibility() == View.GONE) { 
       detailsFrameBmt.setVisibility(View.VISIBLE); 
      } 
      if (listFrame != null && listFrame.getVisibility() == View.GONE) { 
       listFrame.setVisibility(View.VISIBLE); 
      } 

      break; 
     ///Docs 
     case 3: 
      ft.replace(R.id.full_frame, docsfraglist); 
      ft.remove(rotcfraglist); 
      ft.remove(afafraglist); 
      ft.remove(bmtfraglist); 

      if (fullFrame != null && fullFrame.getVisibility() == View.GONE) { 
       fullFrame.setVisibility(View.VISIBLE); 
      } 
      if (listFrame != null && listFrame.getVisibility() == View.VISIBLE) { 
       listFrame.setVisibility(View.GONE); 
      } 
      if (detailsFrameAfa != null 
        && detailsFrameAfa.getVisibility() == View.VISIBLE) { 
       detailsFrameAfa.setVisibility(View.GONE); 
      } 
      if (detailsFrameBmt != null 
        && detailsFrameBmt.getVisibility() == View.VISIBLE) { 
       detailsFrameBmt.setVisibility(View.GONE); 
      } 
      if (detailsFrameRotc != null 
        && detailsFrameRotc.getVisibility() == View.VISIBLE) { 
       detailsFrameRotc.setVisibility(View.GONE); 
      } 

      break; 
     ///Extra 
     case 4: 
      ft.replace(R.id.full_frame, extrafraglist); 
      ft.remove(rotcfraglist); 
      ft.remove(afafraglist); 
      ft.remove(bmtfraglist); 

      if (fullFrame != null && fullFrame.getVisibility() == View.GONE) { 
       fullFrame.setVisibility(View.VISIBLE); 
      } 
      if (listFrame != null && listFrame.getVisibility() == View.VISIBLE) { 
       listFrame.setVisibility(View.GONE); 
      } 
      if (detailsFrameAfa != null 
        && detailsFrameAfa.getVisibility() == View.VISIBLE) { 
       detailsFrameAfa.setVisibility(View.GONE); 
      } 
      if (detailsFrameBmt != null 
        && detailsFrameBmt.getVisibility() == View.VISIBLE) { 
       detailsFrameBmt.setVisibility(View.GONE); 
      } 
      if (detailsFrameRotc != null 
        && detailsFrameRotc.getVisibility() == View.VISIBLE) { 
       detailsFrameRotc.setVisibility(View.GONE); 
      } 

      break; 
     } 
     ft.commit(); 
     mDrawerList.setItemChecked(position, true); 

     // Get the title followed by the position 
     setTitle(title[position]); 
     // Close drawer 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } 

의 변화 그리고 내 가로 레이아웃의

<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_rotc" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_toRightOf="@id/list_frame" > 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/details_afa" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_toRightOf="@id/list_frame" > 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/details_bmt" 
     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> 
관련 문제