gpt4 book ai didi

java - 使用自定义适配器将项目动态添加到 ListView 中的问题

转载 作者:行者123 更新时间:2023-12-01 09:00:05 25 4
gpt4 key购买 nike

当我单击按钮时,我无法使用自定义适配器将项目动态添加到 ListView 中。事实上,最后一条短信被新短信覆盖。

我向你展示我的代码!

提前感谢大家...我希望你能帮助我!

型号类别:

public class Sms {
String nome;
String testo;

public Sms(String nome, String testo ) {

this.nome=nome;
this.testo=testo;

}

public String getNome() {
return nome;
}

public String getTesto() {
return testo;
}


}

自定义适配器:

public class CustomAdapter extends ArrayAdapter<Sms> {

private ArrayList<Sms> dataSms;
Context mContext;
//ArrayList<Location> data = new ArrayList<Location>();
// View lookup cache
private static class ViewHolder {
TextView txtNome;
TextView txtTesto;
}

public CustomAdapter(ArrayList<Sms> data, Context context) {
super(context, R.layout.row_item, data);
this.dataSms = data;
this.mContext=context;

}

/* @Override
public void onClick(View v) {

int position=(Integer) v.getTag();
Object object= getItem(position);
DataModel dataModel=(DataModel)object;

switch (v.getId())
{
case R.id.item_info:
Snackbar.make(v, "Release date " +dataModel.getFeature(), Snackbar.LENGTH_LONG)
.setAction("No action", null).show();
break;
}
}*/

//private int lastPosition = -1;
@Override
public int getCount() {
return dataSms.size();
}
/* @Override
public Object getItem(int pos) {
return dataSms.get(pos);
}*/
@Override
public long getItemId(int position) {
return position;
}
@Override
public void add(Sms sms) {
dataSms.add(sms);
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Sms sms = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
ViewHolder viewHolder; // view lookup cache stored in tag

final View result;

if (convertView == null) {

viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.row_item, parent, false);
viewHolder.txtNome = (TextView) convertView.findViewById(R.id.nome);
viewHolder.txtTesto = (TextView) convertView.findViewById(R.id.testo);

result=convertView;

convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
result=convertView;
}

/*Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
result.startAnimation(animation);*/
// lastPosition = position;

viewHolder.txtNome.setText(sms.getNome());
viewHolder.txtTesto.setText(sms.getTesto());
/*viewHolder.info.setOnClickListener(this);
viewHolder.info.setTag(position);*/
// Return the completed view to render on screen
return convertView;
}
}

主要 Activity :

public class MainActivity extends Activity {
private static final int PERMS_REQUEST_CODE = 123;
private static final int REQUEST_CODE = 1;
TextView textViewTime;
TimePicker timePicker;
Button button;

ArrayList<Sms> dataSms;
ListView listView;
public static CustomAdapter adapter;

int hour;
int minutee;
//int hour;
//int minute;
//ListView lv;
//ArrayList<String> al;
//ArrayAdapter<String> aa;

final int TIME_DIALOG_ID = 999;

/*public String sPhone,sSms;
public EditText etPhone,etSms;*/

public Button bStart, bCancel, bTimeSelect, bPhone;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Button b=(Button) findViewById(R.id.button1);
//Button button=(Button) findViewById(R.id.button);

bStart = (Button) findViewById(R.id.bStart);
//bCancel = (Button)findViewById(R.id.bCancel);
bTimeSelect = (Button) findViewById(R.id.bTime);
bPhone = (Button) findViewById(R.id.bCPhone);


bStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* if (hasPermissions()) {
// our app has permissions.
scheduleAlarm(v);
} else {
//our app doesn't have permissions, So i m requesting permissions.
requestPerms();
}*/
scheduleAlarm(v);

}
});

bTimeSelect.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onClick(View v) {

DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "TimePicker");

}
});

//};
bPhone.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Uri uri = Uri.parse("content://contacts");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);
}
});


}


@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("ValidFragment")
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

//TimePicker timePicker;
//int hour;
//int minutee;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//Use the current time as the default values for the time picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);

//Create and return a new instance of TimePickerDialog
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}


//onTimeSet() callback method
@TargetApi(Build.VERSION_CODES.M)
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

hour = hourOfDay;
minutee = minute;


}
}


@TargetApi(Build.VERSION_CODES.M)
public void scheduleAlarm(View V) {


listView = (ListView) findViewById(R.id.listView1);

dataSms = new ArrayList<>();


EditText et1 = (EditText) findViewById(R.id.etPhone);
EditText et2 = (EditText) findViewById(R.id.etSms);
String name = et1.getText().toString();
String sms = et2.getText().toString();


dataSms.add(new Sms(name, sms));
adapter = new CustomAdapter(dataSms, getApplicationContext());

listView.setAdapter(adapter);


// PendingIntent pendingIntent;
//Long time= new GregorianCalendar().getTimeInMillis()+24*60*60*1000;
// Long time = new GregorianCalendar().getTimeInMillis() + 10000;
//Long time= System.currentTimeMillis() + 10000;

Intent intentAlarm = new Intent(this, AlarmReceiver.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Bundle bundle = new Bundle();
bundle.putCharSequence("Number", name);
bundle.putCharSequence("Message", sms);
intentAlarm.putExtras(bundle);


final Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minutee);
//alarmManager.set(AlarmManager.RTC_WAKEUP, time, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));


Toast.makeText(this, "Messaggio programmato!", Toast.LENGTH_LONG).show();


}
}

最佳答案

将此代码移至 onCreate 方法

    listView = (ListView) findViewById(R.id.listView1);
dataSms = new ArrayList<>();
adapter = new CustomAdapter(dataSms, getApplicationContext());
listView.setAdapter(adapter);

并在scheduleAlarm方法内部创建消息并将其添加到适配器上

adapter.add(new Sms(name, sms));

关于java - 使用自定义适配器将项目动态添加到 ListView 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41747655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com