列表视图中的滚动问题android

时间:2014-08-26 05:45:56

标签: android android-listview

我在列表视图中有一些项目。滚动列表视图时我遇到了一些问题。滚动不顺畅。当列表视图从底部遇到新项目时,它会尝试显示该项目的完整视图。因为滚动问题遇到了。请帮助我如何解决这个问题。

public class InputValueAdapter<T> extends BaseAdapter implements
        OnClickListener {

    private Context context;
    private LayoutInflater inflater;
    private ArrayList<CategoryData> finalCateData;
    private ProgressDialog pDialog;
    public static final int TYPE_GOLD = 0;
    public static final int TYPE_SILVER = 1;
    public static final int TYPE_OTHER = 2;
    public static final int VIEWS_TOTAL = 3;

    public InputValueAdapter(Context context,
            ArrayList<CategoryData> finalCateData) {

        this.context = context;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.finalCateData = finalCateData;
    }

    @Override
    public int getCount() {
        Log.i("log_data", "size is " + finalCateData.size());
        return finalCateData.size();

    }

    @Override
    public Object getItem(int pos) {

        return pos;
    }

    @Override
    public int getViewTypeCount() {

        return VIEWS_TOTAL;
    }
    @Override
    public long getItemId(int pos) {

        return pos;
    }

    @Override
    public int getItemViewType(int position) {

        if( finalCateData.get(position).id == 3)
            return TYPE_GOLD;

        else if( finalCateData.get(position).id == 4)
            return TYPE_SILVER;
        else
            return TYPE_OTHER;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup arg2) {

        final ViewHolder holder;
        CategoryData data = finalCateData.get(position);

        int type = getItemViewType(position);
        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
            case TYPE_GOLD:
                convertView = inflater.inflate(R.layout.gold_zakat_item, null);

                holder.zakatName = (TextView) convertView.findViewById(R.id.zakatName);
                holder.zatakValue = (TextView) convertView.findViewById(R.id.zatakValue);
                holder.zakatImage = (ImageView) convertView.findViewById(R.id.zakatImage);
                holder.zatakColour = (View) convertView.findViewById(R.id.zatakColour);
                holder.pull24GoldMktPrice = (TextView) convertView
                        .findViewById(R.id.pull24GoldMktPrice);
                holder.pull22GoldMktPrice = (TextView) convertView
                        .findViewById(R.id.pull22GoldMktPrice);
                holder.pull18GoldMktPrice = (TextView) convertView
                        .findViewById(R.id.pull18GoldMktPrice);


                holder.goldWT24ZakatET = (EditText) convertView.findViewById(R.id.goldWT24ZakatET);
                holder.gold24ZakatET = (EditText) convertView.findViewById(R.id.gold24ZakatET);
                holder.goldWT22ZakatET = (EditText) convertView.findViewById(R.id.goldWT22ZakatET);
                holder.gold22ZakatET = (EditText) convertView.findViewById(R.id.gold22ZakatET);
                holder.goldWT18ZakatET = (EditText) convertView.findViewById(R.id.goldWT18ZakatET);
                holder.gold18ZakatET = (EditText) convertView.findViewById(R.id.gold18ZakatET);

                break;

            case TYPE_SILVER:
                convertView = inflater.inflate(R.layout.silver_zakat_item, null);

                holder.zakatName = (TextView) convertView.findViewById(R.id.zakatName);
                holder.zatakValue = (TextView) convertView.findViewById(R.id.zatakValue);
                holder.zakatImage = (ImageView) convertView.findViewById(R.id.zakatImage);
                holder.zatakColour = (View) convertView.findViewById(R.id.zatakColour);
                holder.zatakInfo = (TextView) convertView.findViewById(R.id.zatakInfo);
                holder.pullSilverMktPrice = (TextView) convertView.findViewById(R.id.pullSilverMktPrice);
                holder.silverWTZakatET = (EditText) convertView.findViewById(R.id.silverWTZakatET);
                holder.silverZakatET = (EditText) convertView.findViewById(R.id.silverZakatET);
                break;

            case TYPE_OTHER:
                convertView = inflater.inflate(R.layout.other_zakat_item, null);

                holder.zakatName = (TextView) convertView.findViewById(R.id.zakatName);
                holder.zatakValue = (TextView) convertView.findViewById(R.id.zatakValue);
                holder.zakatImage = (ImageView) convertView.findViewById(R.id.zakatImage);
                holder.zatakColour = (View) convertView.findViewById(R.id.zatakColour);
                holder.zatakInfo = (TextView) convertView.findViewById(R.id.zatakInfo);
                holder.otherZakatValET = (EditText) convertView.findViewById(R.id.otherZakatValET);
                break;
            }
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }

        holder.zakatName.setText("Zakat on " + data.cateName);
        holder.zatakValue.setText(data.CateValue);
        holder.zakatImage.setBackgroundResource(data.resID);

        switch (type) {
        case TYPE_GOLD:
            Log.i("log_data", data.cateName);
            holder.pull24GoldMktPrice.setOnClickListener(this);
            holder.pull22GoldMktPrice.setOnClickListener(this);
            holder.pull18GoldMktPrice.setOnClickListener(this);
            holder.goldWT24ZakatET.requestFocusFromTouch();
            holder.goldWT22ZakatET.requestFocusFromTouch();
            holder.goldWT18ZakatET.requestFocusFromTouch();
            holder.gold24ZakatET.requestFocusFromTouch();
            holder.gold22ZakatET.requestFocusFromTouch();
            holder.gold18ZakatET.requestFocusFromTouch();

            holder.goldWT24ZakatET.setTag(position);
            holder.goldWT22ZakatET.setTag(position);
            holder.goldWT18ZakatET.setTag(position);
            holder.gold24ZakatET.setTag(position);
            holder.gold22ZakatET.setTag(position);
            holder.gold18ZakatET.setTag(position);


            holder.goldWT24ZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.goldWT24ZakatET);
                            finalCateData.get(posi).goldWT24 = et.getText()
                                    .toString();
                        }
                    });
            holder.goldWT22ZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.goldWT22ZakatET);
                            finalCateData.get(posi).goldWT22 = et.getText()
                                    .toString();
                        }
                    });
            holder.goldWT18ZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.goldWT18ZakatET);
                            finalCateData.get(posi).goldWT18 = et.getText()
                                    .toString();
                        }
                    });

            holder.gold24ZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.gold24ZakatET);
                            finalCateData.get(posi).goldPrice24 = et.getText()
                                    .toString();
                        }
                    });
            holder.gold22ZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.gold22ZakatET);
                            finalCateData.get(posi).goldPrice22 = et.getText()
                                    .toString();
                        }
                    });
            holder.gold18ZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.gold18ZakatET);
                            finalCateData.get(posi).goldPrice18 = et.getText()
                                    .toString();
                        }
                    });

            holder.gold18ZakatET
            .setOnEditorActionListener(new OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId,
                        KeyEvent event) {

                    if (actionId == EditorInfo.IME_ACTION_DONE) {
                        holder.gold18ZakatET.clearFocus();
                        hideKeybord(holder.gold18ZakatET);
                    }

                    return false;
                }
            });

            break;

        case TYPE_SILVER: 
            Log.i("log_data", data.cateName);
            holder.pullSilverMktPrice.setOnClickListener(this);
            holder.zatakInfo.setText(data.CateInfo);
            holder.silverWTZakatET.requestFocusFromTouch();
            holder.silverZakatET.requestFocusFromTouch();
            holder.silverZakatET.setTag(position);
            holder.silverWTZakatET.setTag(position);
            holder.silverWTZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {
                            Log.i("log_data", "hello");
                            Log.i("log_data", "focus" + hasFocus);
                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.silverWTZakatET);
                            finalCateData.get(posi).silverWT = et.getText()
                                    .toString();
                        }
                    });

            holder.silverZakatET
                    .setOnFocusChangeListener(new OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            int posi = (Integer) v.getTag();
                            EditText et = (EditText) v
                                    .findViewById(R.id.silverZakatET);
                            finalCateData.get(posi).silverPrice = et.getText()
                                    .toString();
                        }
                    });

            /*holder.silverWTZakatET
                    .setOnEditorActionListener(new OnEditorActionListener() {

                        @Override
                        public boolean onEditorAction(TextView v, int actionId,
                                KeyEvent event) {

                            if (actionId == EditorInfo.IME_ACTION_DONE) {
                                holder.silverWTZakatET.clearFocus();
                                hideKeybord(holder.silverWTZakatET);
                            }

                            return false;
                        }
                    });*/

            holder.silverZakatET
                    .setOnEditorActionListener(new OnEditorActionListener() {

                        @Override
                        public boolean onEditorAction(TextView v, int actionId,
                                KeyEvent event) {

                            if (actionId == EditorInfo.IME_ACTION_DONE) {
                                holder.silverZakatET.clearFocus();
                                hideKeybord(holder.silverZakatET);
                            }

                            return false;
                        }
                    });



            break;

        case TYPE_OTHER:
            Log.i("log_data", data.cateName);
            holder.zatakInfo.setText(data.CateInfo);
            holder.otherZakatValET.requestFocusFromTouch();
            //holder.otherZakatValET.setFocusable(true);
            holder.otherZakatValET.setText(finalCateData.get(position).estimatedVal);
            Log.i("log_data", "position "+position+" data "+ finalCateData.get(position).estimatedVal);
            holder.otherZakatValET.setTag(position);
            holder.otherZakatValET.setOnFocusChangeListener(new OnFocusChangeListener() {

                @Override
                public void onFocusChange(View v, boolean hasFocus) {

                    int posi = (Integer)v.getTag();
                    EditText et = (EditText)v.findViewById(R.id.otherZakatValET);
                    finalCateData.get(posi).estimatedVal = et.getText().toString();
               }
            }); 

            holder.otherZakatValET.setOnEditorActionListener(new OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                    if( actionId ==  EditorInfo.IME_ACTION_DONE){
                        holder.otherZakatValET.clearFocus();
                        hideKeybord(holder.otherZakatValET);
                    }


                    return false;
                }
            });

            break;
        } 

        setZatakColourLine(data.id,holder.zatakColour);


        return convertView;
    }

    // =============================================================================

    private void setZatakColourLine(int id, View zatakView) {

        switch (id) {
        case 0:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.agriculture_colour));
            break;

        case 1:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.animal_colour));
            break;

        case 2:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.stones_colour));
            break;

        case 3:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.gold_colour));
            break;

        case 4:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.silver_colour));
            break;

        case 5:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.loan_colour));
            break;

        case 6:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.property_colour));
            break;

        case 7:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.cash_colour));
            break;

        case 8:
            zatakView.setBackgroundColor(context.getResources().getColor(
                    R.color.share_colour));
            break;

        }
    }

    // ==============================================================================

    private class ViewHolder {

        int id = 10;
        LinearLayout GoldLL;
        LinearLayout silverLL;
        LinearLayout otherLL;
        LinearLayout nonGoldLL;
        TextView zakatName = null;
        TextView zatakValue = null;
        TextView zatakInfo = null;
        ImageView zakatImage = null;
        View zatakColour = null;
        EditText otherZakatValET = null;
        EditText silverWTZakatET;
        EditText silverZakatET;
        EditText goldWT24ZakatET;
        EditText gold24ZakatET;
        EditText goldWT22ZakatET;
        EditText gold22ZakatET;
        EditText goldWT18ZakatET;
        EditText gold18ZakatET;
        TextView pull24GoldMktPrice = null;
        TextView pull22GoldMktPrice = null;
        TextView pull18GoldMktPrice = null;
        TextView pullSilverMktPrice = null;


    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.pull24GoldMktPrice:

            new Get24GoldMarketPrice().execute(GlobalVariables.MKT_GOLD_24_API);
            break;

        case R.id.pullSilverMktPrice:
            new Get24GoldMarketPrice().execute(GlobalVariables.MKT_SILVER_API);
            break;

        }

    }

    // =======================================================================

    private class Get24GoldMarketPrice extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(context);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

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

            String val = "";
            ServiceHandler sh = new ServiceHandler();
            String jsonStr = sh.makeServiceCall(url[0], ServiceHandler.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
                    JSONArray array = jsonObj.getJSONArray("data");

                    String s = array.get(0).toString();
                    String regex = "\\[|\\]";
                    s = s.replaceAll(regex, "");
                    val = (s.toString().split(","))[1];
                    Double goldPrice = Double.parseDouble(val) / 31.1035;
                    val = String.valueOf(goldPrice);
                    Log.i("log_data", "" + String.valueOf(goldPrice));

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return val;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (pDialog.isShowing())
                pDialog.dismiss();

            TextView goldPrice = new TextView(context);
            goldPrice.setText(result);
            new AlertDialog.Builder(context)
                    .setTitle("Gold price")
                    .setView(goldPrice)
                    .setPositiveButton(
                            context.getResources().getString(R.string.ok),
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {

                                }
                            }).create().show();
        }

    }

    public void hideKeybord(EditText et) {

        InputMethodManager imm = (InputMethodManager)context.getSyst`enter code here`emService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(et.getWindowToken(), 
                                  InputMethodManager.RESULT_UNCHANGED_SHOWN);
    }

}

0 个答案:

没有答案