2017-11-20 6 views
0

現在のボタンをクリックして背景色を変更して、次のページボタンの背景を変更しています。 基本的には、ユーザーが4つのオプションのいずれかをクリックしたときに、次のページボタンの背景を変更しています と私はoption1をクリックして、そのオプションのテキストを取得するためにトーストを表示していても、次のページのテキストを表示していますoption1 どうすればいいですか?ビューページの現在のビューを更新するには?

package com.app.apti.adapter; 

import android.content.Context; 
import android.support.design.widget.CoordinatorLayout; 
import android.support.v4.view.PagerAdapter; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.app.apti.R; 
import com.app.apti.model.QuestionData; 

import java.util.ArrayList; 


public class QuestionViewPager extends PagerAdapter { 


LinearLayout option1color,option2color,option3color,option4color; 
TextView option1,option2,option3,option4,ques,questionno; 
private Context context; 
ArrayList<QuestionData> question; 
LayoutInflater layoutInflater; 
ImageView imageView; 
String category; 

public QuestionViewPager(Context context, ArrayList<QuestionData> 
question,String category) 
{ 
    this.context=context; 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.question=question; 
    this.category=category; 
} 

@Override 
public int getCount() { 
    if(question != null){ 
     return question.size(); 
    } 
    return 0; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((LinearLayout) object); 
} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

@Override 
public Object instantiateItem(ViewGroup container, final int position) { 
    View itemView = layoutInflater.inflate(R.layout.questionlayout, container, false); 
    option1color=(LinearLayout)itemView.findViewWithId(R.id.color_option1); 
    option2color=(LinearLayout)itemView.findViewById(R.id.color_option2); 
    option3color=(LinearLayout)itemView.findViewById(R.id.color_option3); 
    option4color=(LinearLayout)itemView.findViewById(R.id.color_option4); 

    option1=(TextView)itemView.findViewById(R.id.option1); 
    option2=(TextView)itemView.findViewById(R.id.option2); 
    option3=(TextView)itemView.findViewById(R.id.option3); 
    option4=(TextView)itemView.findViewById(R.id.option4); 
    ques=(TextView)itemView.findViewById(R.id.ques); 
    questionno=(TextView)itemView.findViewById(R.id.questionno); 

    questionno.setText(position+1+"/"+getCount()); 
    ques.setText(Html.fromHtml(question.get(position).getQues())); 
    option1.setText(Html.fromHtml(question.get(position).getOpt1())); 
    option2.setText(Html.fromHtml(question.get(position).getOpt2())); 
    option3.setText(Html.fromHtml(question.get(position).getOpt3())); 
    option4.setText(Html.fromHtml(question.get(position).getOpt4())); 

    option1color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      notifyDataSetChanged(); 
      Toast.makeText(context,option1.getText().toString(),Toast.LENGTH_SHORT).show(); 
      if(question.get(position).getAns().equalsIgnoreCase(option1.getText().toString())) 
      { 

       option1color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option1color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 
    option2color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(question.get(position).getAns().equalsIgnoreCase(option2.getText().toString())) 
      { 
       option2color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option2color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 
    option3color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(question.get(position).getAns().equalsIgnoreCase(option3.getText().toString())) 
      { 
       option3color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option3color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 
    option4color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(question.get(position).getAns().equalsIgnoreCase(option4.getText().toString())) 
      { 
       option4color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option4color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 

    container.addView(itemView); 

    return itemView; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    container.removeView((LinearLayout) object); 
} 



} 

答えて

0

LinearLayout option1color,option2color,option3color,option4color; 
TextView option1,option2,option3,option4,ques,questionno; 

はフィールドであり、その値はinstantiateItemの最後の呼び出しで設定された最後の値に設定されますので、この出来事。クリックコールバックが呼び出されると、最後に割り当てられた値が取得されます。ちょうどそれらをinstantiateItemメソッド本体内のローカル変数にして、うまくいくはずです。

全コード:

package com.app.apti.adapter; 

import android.content.Context; 
import android.support.design.widget.CoordinatorLayout; 
import android.support.v4.view.PagerAdapter; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.app.apti.R; 
import com.app.apti.model.QuestionData; 

import java.util.ArrayList; 


public class QuestionViewPager extends PagerAdapter { 

private Context context; 
ArrayList<QuestionData> question; 
LayoutInflater layoutInflater; 
ImageView imageView; 
String category; 

public QuestionViewPager(Context context, ArrayList<QuestionData> 
question,String category) 
{ 
    this.context=context; 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.question=question; 
    this.category=category; 
} 

@Override 
public int getCount() { 
    if(question != null){ 
     return question.size(); 
    } 
    return 0; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((LinearLayout) object); 
} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

@Override 
public Object instantiateItem(ViewGroup container, final int position) { 
    /* ALL LOCAL VARIABLES */ 
    LinearLayout option1color,option2color,option3color,option4color; 
    TextView option1,option2,option3,option4,ques,questionno; 

    View itemView = layoutInflater.inflate(R.layout.questionlayout, container, false); 
    option1color=(LinearLayout)itemView.findViewWithTag(R.id.color_option1); 
    option2color=(LinearLayout)itemView.findViewById(R.id.color_option2); 
    option3color=(LinearLayout)itemView.findViewById(R.id.color_option3); 
    option4color=(LinearLayout)itemView.findViewById(R.id.color_option4); 

    option1=(TextView)itemView.findViewById(R.id.option1); 
    option2=(TextView)itemView.findViewById(R.id.option2); 
    option3=(TextView)itemView.findViewById(R.id.option3); 
    option4=(TextView)itemView.findViewById(R.id.option4); 
    ques=(TextView)itemView.findViewById(R.id.ques); 
    questionno=(TextView)itemView.findViewById(R.id.questionno); 

    questionno.setText(position+1+"/"+getCount()); 
    ques.setText(Html.fromHtml(question.get(position).getQues())); 
    option1.setText(Html.fromHtml(question.get(position).getOpt1())); 
    option2.setText(Html.fromHtml(question.get(position).getOpt2())); 
    option3.setText(Html.fromHtml(question.get(position).getOpt3())); 
    option4.setText(Html.fromHtml(question.get(position).getOpt4())); 

    option1color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context,option1.getText().toString(),Toast.LENGTH_SHORT).show(); 
      if(question.get(position).getAns().equalsIgnoreCase(option1.getText().toString())) 
      { 

       option1color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option1color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 
    option2color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(question.get(position).getAns().equalsIgnoreCase(option2.getText().toString())) 
      { 
       option2color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option2color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 
    option3color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(question.get(position).getAns().equalsIgnoreCase(option3.getText().toString())) 
      { 
       option3color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option3color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 
    option4color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(question.get(position).getAns().equalsIgnoreCase(option4.getText().toString())) 
      { 
       option4color.setBackgroundResource(R.drawable.round_corner_green); 
      }else 
      { 
       option4color.setBackgroundResource(R.drawable.round_corner_red); 

      } 
     } 
    }); 

    container.addView(itemView); 

    return itemView; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    container.removeView((LinearLayout) object); 
} 



} 
+0

今このエラーが発生しますjava.lang.NullPointerException:仮想メソッドを呼び出すしようとしました 'void android.widget.LinearLayout.setOnClickListener android.view.View $ OnClickListener) 'nullオブジェクトの参照 –

+0

それは持ってはいけない、他の問題があります。あなたは正確なエラーログを共有できますか? 'onClickListener'から' notifyDataSetChanged(); 'も削除してください。コードを更新しました。 – vader

+0

ありがとう、それは私の愚かな働いた –

0

はい、インターフェイスを使用できます。ユーザーが質問に対する回答を与えるたびに、特定のページャのアクティビティやフラグメントでインターフェイス実装を使用してコールバックフォームアダプタクラスを作成できます。そのコールバックに基づいて、あなたはビューに触れることができ、質問の答えごとにバックグラウンドを変えることができます。

ハッピーコーディング!いずれかのクエリが私に知らせる場合。

+0

ねえ、あなたは私が –

+0

はいを​​Androidに新しいですが、現在、私はあなたのためにそれをしなければならないが、いくつかの時間後に提供する任意の例を持っていなかった例を与えることができます –

0
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int i, float v, int i1) { 
     } 

     @Override 
     public void onPageSelected(int i) { 
      updatePage(i); //a dummy method to do 
     } 

     @Override 
     public void onPageScrollStateChanged(int i) { 
     } 
    }); 

private void updateFab(int selectedPage) { 
    switch (selectedPage) { 
     case MainPagerAdapter.POS1: 
      showToast(); 
      break; 
     case MainPagerAdapter.POS2: 
      hideToast(); 
      break; 
     case MainPagerAdapter.POS3: 
      showToast(); 
     default: 
      break; 
    } 
} 
MainPagerAdapterがFragPagerADapterを拡張し、

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
    case POS1: 
     return FragOne.newInstance(); 
    case POS2: 
     return FragTwo.newInstance(); 
    case POS2: 
     return FragThree.newInstance(); 
    default: 
     return null; 
    } 
} 
+0

申し訳ありませんが、愚かな質問updatePage(i);ここで何を書きますか –

+0

コードで何をしたいのかを定義します。背景色を更新したり、そのページのリストの内容を更新したりできます。 –

+0

私はどのようにレイアウトのビューの参照を得ることができます –

関連する問題