0

Children of ViewpagerAndroid Viewpager,按鈕點擊或任何其他關於Viewpager

以及你可以在圖像中看到。按鈕無法正常工作。 這個問題怎麼發生我不明白。

我在做一個測驗應用程序。 如果用戶點擊錯誤的答案,我想讓按鈕的背景顏色爲紅色,否則點擊true的答案,按鈕的背景顏色會變成綠色。

在用戶從列表中選擇的第一頁上,按鈕正常工作。在頁面按鈕滑動後出現錯誤。總是會改變以前的頁面按鈕顏色。

我認爲這是因爲,viewpager不知道哪個按鈕的顏色應該改變我的控制方法後。

這是我在viewpager活動控制方法:

public void click(View v) { 

      int c = 0; 
      switch (v.getId()) { 
      case R.id.cevap1a: 
       c = 1; 
       controlanswer(c); 
       break; 
      case R.id.cevap2b: 
       c = 2; 
       controlanswer(c); 
       break; 
      case R.id.cevap3c: 
       c = 3; 
       controlanswer(c); 
       break; 
      case R.id.cevap4d: 
       c = 4; 
       controlanswer(c); 
       break; 
      case R.id.cevap5e: 
       c = 5; 
       controlanswer(c); 
       break; 
      default: 
       break; 
      } 
     } 

    public void controlanswer(int a) { 

      int d = mViewPager.getCurrentItem(); 
      int answer = mquestiondatabase.get(d).gettrueanswer(); 


      if (a == answer) { 

       truecolor(a); 

      } else { 

       wrongcolor(a); 
       truecolor(answer); 

      } 
     } 

     public void wrongcolor(int wrong) { 
      cevapA = (TextView) mViewPager.findViewById(R.id.cevap1a); 
      cevapB = (TextView) mViewPager.findViewById(R.id.cevap2b); 
      cevapC = (TextView) mViewPager.findViewById(R.id.cevap3c); 
      cevapD = (TextView) mViewPager.findViewById(R.id.cevap4d); 
      cevapE = (TextView) mViewPager.findViewById(R.id.cevap5e); 

      switch (wrong) { 

      case 1: 
       cevapA.setBackgroundResource(R.drawable.red_buton_clicked); 
       break; 
      case 2: 
       cevapB.setBackgroundResource(R.drawable.red_buton_clicked); 
       break; 
      case 3: 
       cevapC.setBackgroundResource(R.drawable.red_buton_clicked); 
       break; 
      case 4: 
       cevapD.setBackgroundResource(R.drawable.red_buton_clicked); 
       break; 
      case 5: 
       cevapE.setBackgroundResource(R.drawable.red_buton_clicked); 
       break; 

      default: 
       break; 
      } 
     } 

     public void truecolor(int answer) { 

      cevapA = (TextView) findViewById(R.id.cevap1a); 
      cevapB = (TextView) findViewById(R.id.cevap2b); 
      cevapC = (TextView) findViewById(R.id.cevap3c); 
      cevapD = (TextView) findViewById(R.id.cevap4d); 
      cevapE = (TextView) findViewById(R.id.cevap5e); 


      AnimationDrawable rocketAnimation; 
      switch (answer) { 

      case 1: 

       cevapA.setBackgroundResource(R.drawable.yesilflash); 
       rocketAnimation = (AnimationDrawable) cevapA.getBackground(); 
       rocketAnimation.start(); 
       break; 
      case 2: 

       cevapB.setBackgroundResource(R.drawable.yesilflash); 
       rocketAnimation = (AnimationDrawable) cevapB.getBackground(); 
       rocketAnimation.start(); 
       break; 
      case 3: 

       cevapC.setBackgroundResource(R.drawable.yesilflash); 
       rocketAnimation = (AnimationDrawable) cevapC.getBackground(); 
       rocketAnimation.start(); 
       break; 
      case 4: 
       cevapD.setBackgroundResource(R.drawable.yesilflash); 
       rocketAnimation = (AnimationDrawable) cevapD.getBackground(); 
       rocketAnimation.start(); 
       break; 
      case 5: 

       cevapE.setBackgroundResource(R.drawable.yesilflash); 
       rocketAnimation = (AnimationDrawable) cevapE.getBackground(); 
       rocketAnimation.start(); 
       break; 

      default: 
       break; 
      } 
     } 
    } 

嗯,我結合我的老問題,在一個問題

+0

什麼在你的logcat的?你會得到什麼確切的錯誤信息? – agamov

+0

以及沒有錯誤。 – mehmet

回答

0

嗯,我已經解決了。

主要的問題是,我寫了我的代碼在fragmentactivity。但在此之後,我已經懷疑這一點,並將我的所有代碼都放在片段中。

我認爲這是使用viewpager的一個很好的例子。

public class newFragment extends Fragment { 

public static final String ExtraID = "com.num"; 
public static ViewPager mViewPager; 
private static String tag = "sqllist"; 

int sayfano; 
private int c = 0; 
int mNum2; 
soru msoru; 
TextView baslik; 
TextView aciklama; 
TextView soru; 
TextView cevapA; 
TextView cevapB; 
TextView cevapC; 
TextView cevapD; 
TextView cevapE; 
CheckBox mSolvedCheckBox; 

public static newFragment newInstance(int num) { 

    Bundle args = new Bundle(); 
    args.putInt("num", num); 
    newFragment fragment = new newFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
    mNum2 = (int) getArguments().getInt("num"); 
    TestAdapter mDbHelper = new TestAdapter(getActivity()); 
    mDbHelper.createDatabase(); 
    mDbHelper.open(); 
    List<soru> mSorus = mDbHelper.getTestData(); 
    msoru = mSorus.get(mNum2); 

    int v = newPagerActivity.sayfano(); 
    Log.d(tag, "crime fragment on create mnum= " + v + "v = " + v); 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     if (NavUtils.getParentActivityName(getActivity()) != null) { 
      NavUtils.navigateUpFromSameTask(getActivity()); 
     } 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 

} 

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_crime, parent, false); 

    aciklama = (TextView) v.findViewById(R.id.aciklama); 
    soru = (TextView) v.findViewById(R.id.soru); 
    cevapA = (TextView) v.findViewById(R.id.cevap1a); 
    cevapB = (TextView) v.findViewById(R.id.cevap2b); 
    cevapC = (TextView) v.findViewById(R.id.cevap3c); 
    cevapD = (TextView) v.findViewById(R.id.cevap4d); 
    cevapE = (TextView) v.findViewById(R.id.cevap5e); 
    baslik = (TextView) v.findViewById(R.id.baslik); 

    try { 
     baslik.setText(msoru.getmId() + ". Soru"); 
     aciklama.setText(msoru.getmTitle().toString()); 
     soru.setText(msoru.getmSoru().toString()); 
     cevapA.setText("A) " + msoru.getmCevap1().toString()); 
     cevapB.setText("B) " + msoru.getmCevap2().toString()); 
     cevapC.setText("C) " + msoru.getmCevap3().toString()); 
     cevapD.setText("D) " + msoru.getmCevap4().toString()); 
     cevapE.setText("E) " + msoru.getmCevap5().toString()); 
    } catch (Exception e) { 
     Log.d(tag, "bir kısım kendini bilmez soru kısımcıkları kaybolmuş"); 
     e.printStackTrace(); 
    } 

    cevapA.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      c = 0; 
      cevapanahtari(c); 
     } 
    }); 

    cevapB.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      c = 1; 
      cevapanahtari(c); 
     } 
    }); 
    cevapC.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      c = 2; 
      cevapanahtari(c); 
     } 
    }); 
    cevapD.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      c = 3; 
      cevapanahtari(c); 
     } 
    }); 
    cevapE.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      c = 4; 
      cevapanahtari(c); 
     } 
    }); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     if (NavUtils.getParentActivityName(getActivity()) != null) 
      getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    return v; 

} 

public void cevapanahtari(int a) { 

    int d = newPagerActivity.getViewPager(); 
    int cevap = msoru.getCevapanahtari(); 


    if (a == cevap) { 
     Log.d(tag, "cevapanahtarı if"); 
     renkdogru(a); 

    } else { 
     Log.d(tag, "cevapanahtarı else"); 
     renkyanlis(a); 
     renkdogru(cevap); 

    } 
} 

public void renkyanlis(int yanlis) { 
    Log.d(tag, "renkyanlis" + yanlis); 
    switch (yanlis) { 

    case 1: 
     cevapA.setBackgroundResource(R.drawable.red_buton_clicked); 
     break; 
    case 2: 
     cevapB.setBackgroundResource(R.drawable.red_buton_clicked); 
     break; 
    case 3: 
     cevapC.setBackgroundResource(R.drawable.red_buton_clicked); 
     break; 
    case 4: 
     cevapD.setBackgroundResource(R.drawable.red_buton_clicked); 
     break; 
    case 5: 
     cevapE.setBackgroundResource(R.drawable.red_buton_clicked); 
     break; 

    default: 
     break; 
    } 
} 

public void renkdogru(int tiklanancevap) { 

    AnimationDrawable rocketAnimation; 
    switch (tiklanancevap) { 

    case 1: 
     Log.d(tag, "rendogru case 1"); 
     cevapA.setBackgroundResource(R.drawable.yesilflash); 
     rocketAnimation = (AnimationDrawable) cevapA.getBackground(); 
     rocketAnimation.start(); 
     break; 
    case 2: 
     cevapB.setBackgroundResource(R.drawable.yesilflash); 
     rocketAnimation = (AnimationDrawable) cevapB.getBackground(); 
     rocketAnimation.start(); 
     break; 
    case 3: 
     cevapC.setBackgroundResource(R.drawable.yesilflash); 
     rocketAnimation = (AnimationDrawable) cevapC.getBackground(); 
     rocketAnimation.start(); 
     break; 
    case 4: 
     cevapD.setBackgroundResource(R.drawable.yesilflash); 
     rocketAnimation = (AnimationDrawable) cevapD.getBackground(); 
     rocketAnimation.start(); 
     break; 
    case 5: 
     cevapE.setBackgroundResource(R.drawable.yesilflash); 
     rocketAnimation = (AnimationDrawable) cevapE.getBackground(); 
     rocketAnimation.start(); 
     break; 

    default: 
     break; 
    } 
} 

}

在otherhand這是我的新片段活動

public class newPagerActivity extends FragmentActivity { 
public static ViewPager mViewPager; 
private int sorusirasi; 
private List<soru> mSorus; 
final String tag = "anahtar"; 
soru mSoruchec; 
public static int c=1; 

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


    mViewPager = new ViewPager(this); 
    mViewPager.setId(R.id.viewPager); 
    setContentView(mViewPager); 
    TestAdapter mDbHelper = new TestAdapter(this); 
    mDbHelper.createDatabase(); 
    mDbHelper.open(); 
    mSorus = mDbHelper.getTestData(); 

    Log.d(tag, "fragment activit yaratıldı"); 


    FragmentManager fm = getSupportFragmentManager(); 
    mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) { 

     @Override 
     public int getCount() { 
      return mSorus.size(); 
     } 

     @Override 
     public Fragment getItem(int sorusirasi) { 

      return newFragment.newInstance(sorusirasi); 
     } 
    }); 

    sorusirasi = getIntent().getIntExtra("num", 0); 
    for (int i = 1; i < mSorus.size(); i++) { 
     if (mSorus.get(i).getmId() == sorusirasi) { 
      mViewPager.setCurrentItem(i); 
      break; 
     } 
    } 
} 
public static int sayfano(){ 

    return c; 

} 

public static int getViewPager() { 
     return mViewPager.getCurrentItem(); 
    } 

}