在我看到的所有示例中,他们在创建ArrayAdapter时只使用"android.R.layout.simple_list_item_1".什么是android.R.layout.simple_list_item_1,它只是名为simple_list_item_1.xml的布局文件的名称,还是数组适配器所需的TextView的id?
如何查看文件的内容或使用我的res文件夹中的文件?
public class MyClass extends ListActivity {
private String[] titles = {"Test"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, titles));
updateList();
}
}
Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我,从应用程序屏幕打开应用程序和从长按主页按钮时弹出的最近使用的应用程序列表中打开它有什么区别?
我甚至不知道最近使用的列表存在,直到一位朋友设法通过从那里启动它来破坏我的应用程序.他尝试了两次并获得相同的力量退出,但当他从应用程序屏幕启动它时它打开很好.
错误日志告诉我在我的ArrayView的ArrayAdaptor上的getCount方法中发生了nullPointerException.
无论如何,我只是想知道我是否需要了解并调整我的代码来处理?
我正在ArrayIndexOutOfBoundsException使用以下给定的自定义实现ArrayAdapter启用过滤.我看到过滤代码返回正确的结果集,但是当过滤后呈现视图时,我得到一个异常.我在这做错了什么.任何帮助都是适用的.
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.TextView;
import com.syntrio.iwm.act.R;
public class IWMArrayAdapter<T> extends ArrayAdapter<T>{
Activity activity;
List<T> mItems;
String[] icons;
boolean isArrowNeeded=false;
boolean isIconNeeded=false;
private ItemsFilter mFilter;
public IWMArrayAdapter(Activity context,List<T> items) {
super(context, R.layout.item_row,items);
activity=context;
mItems=items;
}
public void setIcons(String[] iconList){
if(iconList!=null && iconList.length>0){
icons=iconList;
isIconNeeded=true;
}
}
public void setArrowNeeded(){
isArrowNeeded=true;
}
@Override
public View getView(int position, View convertView,ViewGroup parent) { …Run Code Online (Sandbox Code Playgroud) 我得到一些错误,我不知道为什么.我正在使用片段中的字符串填充数组适配器的ListView.我正在使用此片段作为主屏幕显示在主要活动中这是我的代码
public class HomePage extends Fragment {
private ListView lvHomePage;
private String[] items;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home_page, container, false);
items = getActivity().getResources().getStringArray(R.array.test);
lvHomePage = (ListView) getActivity().findViewById(R.id.lvHomePage);
lvHomePage.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(),
android.R.layout.simple_list_item_1 , items));
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此输出错误:
09-18 21:07:27.315: E/AndroidRuntime(3839): FATAL EXCEPTION: main
09-18 21:07:27.315: E/AndroidRuntime(3839): Process: com.kiko.bmgu.crnobelo, PID: 3839
09-18 21:07:27.315: E/AndroidRuntime(3839): java.lang.RuntimeException: Unable to start activity ComponentInfo com.kiko.bmgu.crnobelo/com.kiko.bmgu.crnobelo.activities.MainActivity}: java.lang.NullPointerException
09-18 21:07:27.315: E/AndroidRuntime(3839): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)\
09-18 21:07:27.315: E/AndroidRuntime(3839): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) …Run Code Online (Sandbox Code Playgroud) android listview android-arrayadapter android-listview android-fragments
我知道关于'getView几次调用'这个问题的问题很少,但我的问题却没什么不同.
我有一个自定义listView与自定义行(使用row_layout.xml).它通常运作良好.一开始我遇到了多次调用getView的问题,并且使用我在stackoverflow中看到的方法之一修复了它.(使用'usedPositions'数组).
现在,我在日志中看到这个场景:getView pos 0,getView pos 1,getView pos 0,getView pos 1.这导致我的行加倍.只有当我调用覆盖当前活动的新活动然后关闭该活动时才会发生这种情况.(例如,打开相机活动,然后关闭它).
我将展示我的代码:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
Toast toast = Toast.makeText(this.context, "getView " + position, 1000);
toast.show();
String pos = Integer.toString(position);
if (!usedPositions.contains(pos)) {
CardHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new CardHolder();
//holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtCouponTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.txtBusinessName = (TextView)row.findViewById(R.id.txtBusinessName);
row.setTag(holder);
}
else …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用多选项创建AlertDialog.我试过了,setMultiChoiceItems但我拥有的是一个ArrayList<Category>而不是CharSequence我尝试使用适配器.
问题setAdapter是,当我选择一个项目时,它会关闭对话框窗口.我想要的是选择项目,然后点击确定按钮,看看哪些项目被选中.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
ArrayAdapter<Category> catsAdapter = new ArrayAdapter<Category>(this, android.R.layout.select_dialog_multichoice,this.categories);
builder.setAdapter(catsAdapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
}
});
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do something
}
});;
AlertDialog alert = builder.create();
alert.show();
Run Code Online (Sandbox Code Playgroud) android android-arrayadapter multiple-choice android-alertdialog
我收到以下警告:
自定义视图com/example/view/adapter/SomeAdapter缺少工具使用的构造函数:(Context)或(Context,AttributeSet)或(Context,AttributeSet,int)
在我的类SomeAdapter中,它扩展了一些扩展ArrayAdapter的BaseAdapter
public class SomeAdapter extends BaseAdapter{}
public abstract class BaseAdapter extends ArrayAdapter<SomeModel>{}
Run Code Online (Sandbox Code Playgroud)
警告存在于具体适配器中,但不存在于抽象BaseAdapter中.在这种情况下有没有人听说过这个警告?
AFAIK Android通过ViewConstructorDetector检查超类的名称来检查类是否正在扩展视图:
private static boolean isViewClass(ClassContext context, ClassNode node) {
String superName = node.superName;
while (superName != null) {
if (superName.equals("android/view/View") //$NON-NLS-1$
|| superName.equals("android/view/ViewGroup") //$NON-NLS-1$
|| superName.startsWith("android/widget/") //$NON-NLS-1$
&& !((superName.endsWith("Adapter") //$NON-NLS-1$
|| superName.endsWith("Controller") //$NON-NLS-1$
|| superName.endsWith("Service") //$NON-NLS-1$
|| superName.endsWith("Provider") //$NON-NLS-1$
|| superName.endsWith("Filter")))) { //$NON-NLS-1$
return true;
}
superName = context.getDriver().getSuperClass(superName);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,我的班级名称与上述模式不符.有谁知道如何修复或抑制此警告?
BaseAdapter中的getView():
@Override
public final View getView(final int position, …Run Code Online (Sandbox Code Playgroud) 我正在使用ArrayAdapter获取我自己的对象类型列表(只有一种类型),并且我为用户提供了创建更多项目的选项(从而为这些项目创建更多视图).在某些时候,getView发送了一个带有非null"convertView"的新"位置"索引.然后它显示最后一个位置的第一个视图.之后,当滚动视图时,所有内容都会混淆.我假设这意味着我以不应该的方式操纵视图,但我只是看不到.这是一些代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
PreviewItemHolder holder = null;
// Initialize view if convertview is null
if (convertView == null) {
v = newView(parent, position);
}
// Populate from previously saved holder
else {
// Use previous item if not null
v = convertView;
}
// Populate if the holder is null (newly inflated view) OR
// if current view's holder's flag is true and requires populating
if ((holder == null) || …Run Code Online (Sandbox Code Playgroud) 我有一个ListFragment,它将通过ArrayAdapter显示项目列表,我正在尝试处理配置更改(设备轮换)我觉得将活动上下文传递给Array Adapter可能会导致在轮换时重新启动Activity时出现内存泄漏并且保留ListFragment适配器,因为我正在使用setRetainInstance(true),有人可以告诉我,如果我的理解是真的吗?如果是这样,处理这个问题的最佳方法是什么.是的,我不想在我的适配器onDetach上取消它,并在重新创建片段视图后重复使用它.
public class DummyXListFragment extends RoboSherlockListFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (adapter == null)
adapter = new DummyItemAdapter(getActivity(),
android.R.layout.simple_list_item_1, list);
}
Run Code Online (Sandbox Code Playgroud) android memory-leaks android-arrayadapter android-fragments android-activity
我正在尝试重构我的应用程序以使用ViewBinding. 我已经浏览了所有的片段和活动;但是,我不确定ArrayAdapter使用视图绑定来防止内存泄漏的正确约定。
viewbinding在 ArrayAdapter 中使用 a 的正确方法是什么?
我一直在使用这种方法来处理片段:
private var _binding: BINDING_FILE_NAME? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = BINDING_FILE_NAME.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼我的适配器:
var myadapter : MyCustomAdapter = MyCustomAdapter(requireContext(), R.layout.row_autocomplete_item, myListOfStrings())
Run Code Online (Sandbox Code Playgroud)
MyCustomAdapter类
class MyCustomAdapter(ctx: Context, private val layout: Int, private val allItems: List<String>) : ArrayAdapter<String>(ctx, layout, allItems) {
var …Run Code Online (Sandbox Code Playgroud) android ×10
listview ×3
java ×2
adapter ×1
convertview ×1
kotlin ×1
listadapter ×1
memory-leaks ×1
warnings ×1