Android BBC新闻和Pulse新闻应用程序如何使用适配器实现水平滚动视图?
对于带适配器的水平滚动视图,没有原生Android支持.我很好奇他们如何回收这些观点.
现在我使用setAdapter更新我的ListView,但我认为正确的方法是使用notifiyDatasetChanged(),我不能让它在我的主类(它在适配器中)工作.这是错误:
对于ListAdapter类型,方法notifyDatasetChanged()未定义
我猜这有更好的方法 - 有人能指出我正确的方向吗?
这是我的代码的相关部分:
public class ScoreList extends SherlockFragmentActivity {
private ListView listViewScore;
static List<Score> listScore = new ArrayList<Score>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.score_list);
ctx = this;
listScore = dbh.getAllScores();
listViewScore = (ListView) findViewById(R.id.score_list);
listViewScore.setAdapter(new ScoreListAdapter(ctx,
R.layout.score_row_item, listScore));
listViewScore.getAdapter().notifyDatasetChanged(); //this is where I get the error
}
}
Run Code Online (Sandbox Code Playgroud)
这是适配器:
public class ScoreListAdapter extends ArrayAdapter<Score> {
private int resource;
private LayoutInflater inflater;
public ScoreListAdapter(Context ctx, int resourceId, List<Score> objects) {
super(ctx, resourceId, objects);
resource = resourceId; …Run Code Online (Sandbox Code Playgroud) 我有一个自定义适配器,布局中有一个复选框。我可以在 CheckBox 上使用 setOnClickListener 而不出现问题吗?还是最好使用 setOnCheckedChangeListener?
代码:
public class MyAdapter extends ArrayAdapter<Object> {
private Context context;
private LayoutInflater mInflater;
private boolean[] selected;
public MyAdaptader(Context context, List<Object> list) {
super(context, 0, list);
this.context = context;
mInflater = LayoutInflater.from(context);
selected = new boolean[list.size()];
}
private OnClickListener pressed= new OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox) v).isChecked())
selected[(Integer)v.getTag()] = true;
else
selected[(Integer)v.getTag()] = false;
}
};
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ArrayAdapter创建一个微调器,我使用资源xml填充其值.
我还想给资源项一些"id"或"value".如何在onItemSelected()回调中检索这些值?
这是Java代码.
package com.waus.waus;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class Register extends Activity implements OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
Spinner countrySpinner = (Spinner) findViewById(R.id.country_code_spinner);
ArrayAdapter<CharSequence> countryAdapter = ArrayAdapter.createFromResource(this, R.array.country_codes, android.R.layout.simple_spinner_item);
countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
countrySpinner.setOnItemSelectedListener(this);
countrySpinner.setAdapter(countryAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-spinner android-resources
也许我只是因为好奇而问错了问题.我通过扩展数组适配器来创建自定义适配器.现在我想在GridView中显示它.我已经阅读了很多文章,我发现它们只使用基本适配器来显示GridView.请大家告诉我这背后的逻辑是什么?我们可以使用Array适配器代替Base Adapter吗?
有没有办法在设计支持 TabLayout 中动态更新选项卡的标题?我尝试在 Adapter 中添加一个方法,该方法更改保存选项卡标题的 ArrayList 的内容并通知适配器,但选项卡标题不会更改为新标题。
适配器:
public class TabAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragments = new ArrayList<>();
private final List<String> fragmentTiles = new ArrayList<>();
public TabAdapter(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment, String title) {
fragments.add(fragment);
fragmentTiles.add(title);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentTiles.get(position);
}
public void setFragmentTiles(int index, String title) {
fragmentTiles.set(index, title);
Log.e("ARRAY", …Run Code Online (Sandbox Code Playgroud) arraylist android-arrayadapter android-design-library androiddesignsupport android-tablayout
我从中获取一些数据FirebaseDatabase然后将它们放入一个array然后尝试List在一个自定义中显示它们AlertDialog.
这是代码:
query = mDatabase.child("child").child(anotherChild).child("yetAnotherChild");
uProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
query.orderByChild("someChild").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null) {
Map<String, String> newD = (Map<String, String>) dataSnapshot.getValue();
ArrayList<String> l = new ArrayList<String>();
l.add(newD.get("lol").substring(30));
String names[] = l.toArray(new String[0]);
AlertDialog.Builder alertDialog = new AlertDialog.Builder(Activity.this);
LayoutInflater inflater = getLayoutInflater();
View convertView = inflater.inflate(R.layout.dialog_list, null);
alertDialog.setView(convertView);
alertDialog.setTitle("title");
ListView lv = (ListView) convertView.findViewById(R.id.lv);
ArrayAdapter<String> adapter = …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-alertdialog firebase firebase-realtime-database
我是 Kotlin 的 Android 开发新手。在遵循教程项目时,我需要使用ArrayAdapter自定义类。构建项目失败并出现错误。
MainActivity.kt 类抛出错误:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
}
val dm = DataManager()
val adapterCourses = ArrayAdapter<CourseInfo>(
context = this,
android.R.layout.simple_spinner_item,
dm.courses.values.toList()
)
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will …Run Code Online (Sandbox Code Playgroud) 我正在尝试将文本设置到EditText我的自定义适配器内部,并且我得到了这个堆栈:
java.lang.NullPointerException: Attempt to read from field 'android.support.v7.widget.ViewInfoStore android.support.v7.widget.RecyclerView.mViewInfoStore' on a null object reference
at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8194)
at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8180)
at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8168)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1573)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3225)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1260)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.widget.ScrollView.onMeasure(ScrollView.java:337)
at android.view.View.measure(View.java:17547)
at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1676)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:400)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) …Run Code Online (Sandbox Code Playgroud) 我有一个自定义ArrayAdapter,它使用ArrayList<OrderedProductItem>我的ListView.在这个ListView中,我有一个AutoCompleteTextView,它也使用了一个自定义ArrayAdapter ArrayList<Product>.在初始化时,此AutoCompleteTextView包含所有产品的名称(大约1250),减1(OrderedProductItem的产品).
然后,用户可以使用Spinner选择Product-Tag并创建过滤ArrayList<Product>,因此我只获得包含此Product-Tag的所有产品的列表(仍然减去1).所以,我的问题是:替换ArrayAdapter对象列表的最佳方法是什么?
我知道我可以在ListActivity中重新创建并重新分配一个新的ArrayAdapter实例:
myAdapter = new MyAdapter(this, R.layout.item_view, myList);
setListAdapter(myAdapter);
Run Code Online (Sandbox Code Playgroud)
我也知道我可以使用clear然后使用addAll替换所有内容:
// NOTE: myAdapter.setNotifyOnChange is kept on default (true)
myAdapter.clear();
myAdapter.addAll(myList);
Run Code Online (Sandbox Code Playgroud)
我想第二个可能是最好的,因为我们不想每次都创建一个新实例,或者ArrayAdapter是否有类似的方法setArray(),我只是在寻找时错过了它?或者是否有另一种方式比第二种选择更好的性能?
java android arraylist android-arrayadapter notifydatasetchanged