Моя проблема заключается в следующем:положение Maintan прокрутки, когда перед именем ListView
У меня есть список новостей, который обновляется каждые несколько минут следующим образом:
Всегда новые сообщения появляются перед старыми (список Prepend)
// Step 1 - Prepend array list
arraylist.add(0, map);
// Step 2 - Notify
adapter.notifyDataSetChanged();
Когда вы вызываете позицию прокрутки «notifyDataSetChanged», сохраняются, но .. Я хочу остаться в текущей позиции ... немного ниже.
например (Facebook> список перед именем после X минут)
, когда пользователь работает в верхней части, чтобы увидеть новые результаты.
Код проверки:
public class testActivity extends Activity {
// Declare Variables
private JSONArray jr;
private ListView listview;
private testAdapter adapter;
private ArrayList<HashMap<String, String>> arraylist;
private EditText message;
private ImageButton post;
private static final String TAG = "test.activity";
/* Create */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
listview = (ListView) findViewById(R.id.listview);
arraylist = new ArrayList<HashMap<String, String>>();
adapter = new testAdapter(this, arraylist);
listview.setAdapter(adapter);
message = (EditText) findViewById(R.id.message);
post = (ImageButton) findViewById(R.id.post);
post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
postMessage();
}
});
}
/* Post Message */
public void postMessage() {
new MyRequest(this, "user", "post",
MyRequest.setParam
(
"message", message.getText().toString().trim()
)
) {
@Override
public void Done(String resp, JSONObject data) {
HashMap<String, String> map = new HashMap<String, String>();
try {
map.put("date", data.getString("date"));
map.put("message", data.getString("message"));
arraylist.add(0, map);
Parcelable state = listview.onSaveInstanceState();
listview.setAdapter(adapter);
listview.onRestoreInstanceState(state);
}
catch (JSONException e) {
Log.e(TAG, "Error JSON Fetch!");
}
}
};
}
}
TestAdapter:
public class testAdapter extends BaseAdapter {
Context context;
LayoutInflater inflater;
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String>();
public testAdapter(Context context,
ArrayList<HashMap<String, String>> arraylist) {
this.context = context;
data = arraylist;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View itemView = convertView; //trying to reuse a recycled view
ViewHolder holder = null;
if (itemView == null) //The view is not a recycled one .. we have to inflate
{
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.listview_item, parent, false);
holder = new ViewHolder();
holder.date = (TextView) itemView.findViewById(R.id.message);
holder.message = (TextView) itemView.findViewById(R.id.date);
itemView.setTag(holder);
}
else // View recycled
holder = (ViewHolder) itemView.getTag();
resultp = data.get(position);
holder.message.setText(resultp.get("message"));
holder.date.setText(resultp.get("date"));
return itemView;
}
/* View Holder */
static class ViewHolder {
TextView message;
TextView date;
}
} // End Class
Какой подкласс «адаптера» вы используете? –
Пользовательский адаптер BaseAdapter –
myCustomAdapter расширяет BaseAdapter –