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