我有ArrayAdapter动力了ListView.我想改变背后的数据ArrayAdapter并更新它们ListView.听起来就像notifyDataSetChanged();我正在寻找的,但它会更新整个ListView,我宁愿逐行更新.
有没有办法做到这一点ArrayAdapter,或者如果我想要这个功能,我是否需要以其他方式管理我的数据?
所以我遇到组成我的ListView的不同部分的问题.我把它们放到一个ArrayList中并使用一个自定义的ArrayAdapter来连接我之前做过的ListView,所以我不相信那里有问题.最初,列表似乎按正确的顺序排列,但随后我将向下滚动列表,然后内容将以不正确的顺序加载.然后我向上滚动,一切都混乱.有没有人遇到过这个?
谢谢 - 杰克
我用这样的代码创建了一些Spinners:
if (dyn_list_id[i]==null){
String[] form_ids = db.getEntireColumn(list_table_name[i], "form_label_id");
String[] spinnerArray = new String[form_ids.length];
for (int k=0;k<form_ids.length;k++){
spinnerArray[k] = db.getFromLanguageTable(language_short_name, list_table_name[i], form_ids[k]);
System.out.println("Spinner Array "+spinnerArray[k]);
}
product_spinner[i] = new Spinner(viewToLoad.getContext()); //First Spinner
product_spinner[i].setLayoutParams(lp_spinner);
product_spinner[i].setBackgroundResource(R.drawable.spinner_selector);
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(viewToLoad.getContext(), com.Orange.R.layout.my_spinner_textview, spinnerArray);
spinnerArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
product_spinner[i].setAdapter(spinnerArrayAdapter);
this.SpinnerFields.add(product_spinner[i]);
linear_layout[i].addView(product_spinner[i]);
tablerow_product[i].addView(linear_layout[i]);
Themes_TableLayout.addView(tablerow_product[i],new TableLayout.LayoutParams(TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
}
else {
String[] spinnerA = new String[item_visible];
int cont=0;
for (int p=0;p<status_itemList.length;p++){
if (status_itemList[p].trim().equals("1")){
spinnerA[cont]=db.getFromLanguageTable(language_short_name, "pr_dyn_list_option", form_label_id_itemList[p]);
System.out.println("Spinner dinamic array "+spinnerA[cont]);
cont++;
}
}
product_spinner[i] = new Spinner(viewToLoad.getContext()); //second Spinner
product_spinner[i].setLayoutParams(lp_spinner); …Run Code Online (Sandbox Code Playgroud) 我的微调器加载了一些消息,每条消息都有自己的id,
public class Message {
private String id;
private String message;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return message;
}
}
Run Code Online (Sandbox Code Playgroud)
我将它传递message给Arrayadapter,
protected List<Message> messages = null;
ArrayAdapter <Message> arrayadapter = new ArrayAdapter<Message>( activity,android.R.layout.simple_spinner_item,messages);
arrayadapter.setDropDownViewResource(R.layout.textview);
spinner1.setAdapter(arrayadapter);
Run Code Online (Sandbox Code Playgroud)
现在,我如何才能获得所选特定消息的ID?我可以用arrayadapter做到这一点.感谢任何帮助
我正在尝试将两列ListView添加到我的Android应用程序中.当我创建项目时,我选择了Fragment选项,它通过向左和向右滑动创建了漂亮的导航.所以我的MainActivity延伸FragmentActivity.
我的问题是当我试图将AddayAdapter添加到ListView时,ArrayAdapter的construstor寻找上下文对象,我不知道要传递它.
这是我得到错误的代码
StableArrayAdapter adapter = new StableArrayAdapter(this, R.layout.row , list);
listview.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
当我传递"this"时,它会传递FragmentActivity,因为该活动扩展了FragmentActivity.但构造函数需要一个"Context"对象.
它给出了此错误消息
"The constructor MainActivity.StableArrayAdapter(MainActivity.DummySectionFragment, int, ArrayList<String>) is undefined"
Run Code Online (Sandbox Code Playgroud)
我怎样才能传递Context对象?
我想获得一个列表标题,当我在主页上键入Edittext然后在单击"确定"按钮后添加到列表中时,我想要的是什么.现在我不知道从主页Activity上的customAdapter类调用我的刷新方法的位置.
请查看我的HomePage活动:
public class Main_Activity extends Activity implements OnClickListener {
Button ok;
EditText addTasklist;
ListView list_tasklistname;
TodoTask_Database db;
CustomAdapter cAdapter;
List<Tasks> list = new ArrayList<Tasks>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
ok = (Button)findViewById(R.id.add);
ok.setOnClickListener(this);
list_tasklistname = (ListView)findViewById(R.id.listview);
db = new TodoTask_Database(getApplicationContext());
list = db.getAllTaskList();
CustomAdapter adapter = new CustomAdapter(Main_Activity.this, R.layout.tasklist_row, list);
list_tasklistname.setAdapter(adapter);
/*list_tasklistname.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View v, int position,
long id) {
}
});*/
db.close();
}
}
@Override
public void onClick(View v) …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-listview custom-adapter
使用Chris Banes的PullToRefresh库,我的自定义适配器的getView()方法没有被调用.这段代码工作正常,不使用他的库,并调用getView().我一直在调查这几天,无法弄清楚出了什么问题.任何反馈将不胜感激!
MyActivity.java
MyAdapter adapter = new MyAdapter(this, data);
// the following toast displays the correct count
Toast.makeText("MyActivity", adapter.getCount(), Toast.LENGTH_SHORT).show();
myListView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
MyAdapter.java
public class MyAdapter extends ArrayAdapter<Object> {
private ArrayList<Object> data;
private LayoutInflater vi;
private Context context;
public MyAdapter(Context context, ArrayList<Object> data) {
super(context, 0);
this.context = context;
this.data = data;
this.vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
static class ViewHolder {
...
}
@Override
public int getCount() {
return data.size();
}
@Override
public long getItemId(int position) {
return …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-listview custom-adapter pull-to-refresh
我在DialogFragment中使用ArrayAdapter,可以在Android 4.0及更高版本上运行,但在2.3版本中不行.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dialog, null);
Spinner spReglement;
spReglement = (Spinner)view.findViewById(R.id.listReglements);
ArrayAdapter<String> adapterList = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
adapterList.setDropDownViewResource(R.layout.customspinner);
spReglement.setAdapter(adapterList);
HashMap<Integer, String> mapReglement = new HashMap<Integer, String>();
mapReglement.put(-1, "");
adapterList.add("");
for(int i=0; i<alReglement.size();i++){
String libelle = String.valueOf(alReglement.get(i).get("Libelle"));
mapReglement.put(i, libelle);
adapterList.add(libelle);
}
builder.setView(view)
.setPositiveButton("Valider", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mListener.onDialogPositiveClick(DialogFSE.this);
}
})
.setNegativeButton("Annuler", new DialogInterface.OnClickListener() { …Run Code Online (Sandbox Code Playgroud) 我有一个自定义的DialogFragment,里面有一个ArrayAdapter,里面有一些editTexts.显示对话框时,即使我按下编辑文本,也不会出现软键盘.编辑文本确实需要重点,但键盘永远不会出现.
如果我不使用适配器,只使用带有编辑文本的视图,它可以很好地工作,但只要我添加适配器,我就会遇到问题.
我的代码如下.任何帮助将非常感激.
提前致谢.
public class ParameterDialog extends DialogFragment {
Context context;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
ArrayList<Parameter> params = this.getArguments().getParcelableArrayList(MainActivity.KEY_PARAMS_TO_DIALOG);
String name = this.getArguments().getString(MainActivity.KEY_NAME_TO_DIALOG);
context = getActivity();
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
ParameterDialogAdapter pda = new ParameterDialogAdapter(context,R.layout.parameter_config_string , params);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder
.setTitle(name)
.setAdapter(pda,null)
.setPositiveButton("Send", new DialogInterface.OnClickListener() { …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
String[] filled_arr;
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.list_item, R.id.tv_wi, filled_arr);
listview.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这是字体:
final Typeface typeface = Typeface.createFromAsset(getAssets(), "Constantia.ttf");
Run Code Online (Sandbox Code Playgroud)
如何为适配器设置它?