0

私はAndroidアプリの開発を学んでおり、最近、Webサービスを自分のアプリに組み込む方法を学びました。インターネットやこのサイトでも何日も検索しましたが、まったく運がありません! リモートMySQLデータベースから質問がロードされ、現在リストビューに表示されている簡単なクイズアプリを開発していますが、その目的は、ユーザーが回答を選択し、次のボタンを押して次の質問に移動します。各質問で直接アクティビティを作成することもできますが、アプリにはサーバーから質問を変更できる動的な機能が必要です。本当に感謝していますアイデア、チュートリアル、または私に役立つものを教えてください。ありがとうございます。

以下は、ここからビューページャーを使用して編集したコードです < http://www.youtube.com/watch?v=JqFkkXMwWDg >

私の AsyncTask クラス:

public class FetchQuestionsTask extends AsyncTask<String, Void, String> {

    private Context mContext;
    private View rootView;
    private ViewPager mViewPager;

    private PagerAdapter mPagerAdapter;

    ArrayList<String> QuestionArray = new ArrayList<String>();
    ArrayList<String> AnswerArray = new ArrayList<String>();
    private String msg;
    View description;

    public FetchQuestionsTask(Context context, View rootView) {

        this.mContext = context;
        this.rootView = rootView;

    }

    @Override
    protected String doInBackground(String... params) {

        if (params == null)
            return null;

        // get url from params
        String url = params[0];

        try {
            // create http connection
            HttpClient client = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(url);

            // connect
            HttpResponse response = client.execute(httpget);

            // get response
            HttpEntity entity = response.getEntity();

            if (entity == null) {
                msg = "No response from server";
                return null;
            }

            // we get response content and convert it to json string
            InputStream is = entity.getContent();
            return streamToString(is);
        } catch (IOException e) {
            msg = "No Network Connection";
            Log.e("Log message", "No network connection");
        }

        return null;
    }

    @Override
    protected void onPostExecute(String sJson) {

        if (sJson == null) {

            return;
        }

        try {

            ArrayList<String> QuestionArray = new ArrayList<String>();
            ArrayList<String> AnswerArray = new ArrayList<String>();
            // convert json string to json array
            JSONArray aJson = new JSONArray(sJson);

            for (int i = 0; i < aJson.length(); i++) {
                JSONObject json = aJson.getJSONObject(i);

                QuestionArray.add(json.getString("description"));
                // AnswerArray.add(json.getString("answer_text"));

            }

        } catch (JSONException e) {
            msg = "Invalid response";

        }

        mPagerAdapter = new PagerAdapter(null, mContext);
        mViewPager = (ViewPager) rootView.findViewById(R.id.viewpager);
        mViewPager.setAdapter(mPagerAdapter);

    }

    /**
     * This function will convert response stream into json string
     * 
     * @param is
     *            response string
     * @return json string
     * @throws IOException
     */
    public String streamToString(final InputStream is) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;

        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            throw e;
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                throw e;
            }
        }

        return sb.toString();
    }

}

MyFragment クラス:

 @SuppressLint("ValidFragment")
public class Page1 extends Fragment {

    Context c2;
      String description, answer_text;

     /* public Page1() {
       }*/

      @SuppressLint("ValidFragment")
    public Page1(Context c2,String description,String answer_text){
          this.c2 = c2;
            this.description = description;
            this.answer_text = answer_text;  
      }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {


        View v = inflater.inflate(R.layout.fragment_pages_list,container, false);

        c2=getActivity();
        new FetchQuestionsTask(c2, v).execute("http://10.0.2.2/webservice/new_questions");


        try{

            TextView question_txt = (TextView)v.findViewById(R.id.q_description);
            question_txt.setText(description);

            TextView answer_txt = (TextView)v.findViewById(R.id.ans_txt);
            answer_txt.setText(answer_text);        
        }catch(Exception e){

            Log.e("Log error :", "could not write the text views");

        }
                return v;
    }



}

私のアダプタークラス:

    public class PagerAdapter extends FragmentStatePagerAdapter{

    ArrayList<String> QuestionArray = new ArrayList<String>();
    ArrayList<String>AnswerArray = new ArrayList<String>();

    private int []colors = {Color.parseColor("#00B050"),Color.parseColor("#FFC000"), Color.parseColor("#DB1351"),
            Color.parseColor("#B61C83"), Color.parseColor("#0070C0")};
    Context c;
    private Random rnd;

    public PagerAdapter(FragmentManager fm,Context c) {
        super(fm);
        this.c = c;}

    @Override
    public Fragment getItem(int position) {

        Fragment fragment = null;
        String description = QuestionArray.get(position);
        String answer_text = AnswerArray.get(position);

        fragment = new Page1(c, description, answer_text);//pass value to be displayed in inflated view
         return fragment;

    }

    @Override
    public int getCount() {
    return QuestionArray.size(); //get number of pages to be displayed
    }

}
4

1 に答える 1

0

viewpagerを使用できます。それはあなたの問題を完全に解決します。

ここにFragmentStatePagerAdapterのリンクがあります

それでも理解に問題がある場合は、このリンクの例を見てください

これは、 Android FragmentPagerAdapter と FragmentStatePagerAdapterの比較を示すもう 1 つのリンクです。

見てみると違いがわかります。

于 2013-09-06T06:28:20.317 に答える