gpt4 book ai didi

android - 带有自定义适配器的字符串数组

转载 作者:搜寻专家 更新时间:2023-11-01 08:42:03 24 4
gpt4 key购买 nike

我们可以使用带有自定义适配器的字符串数组,并且数据应该显示在 Listview 中吗?

我的意思是这样的

 String [] s= {"cars","bike","train"}; 

现在这个字符串数组将如何附加到自定义适配器以及数据将如何显示在 ListView 中。

我知道使用 ArrayList 很容易。

但我想用简单的字符串数组来完成。

最佳答案

好吧,您可以为此使用自定义适配器。但您也可以使用 ArrayAdapter如果你只想在你的 ListView 上显示文本,请上课.

但是,如果您出于某种原因想要创建自定义适配器,请尝试以下操作...

在这种特殊情况下,我继承了 BaseAdapter 类。

这个自定义适配器将掌握我的数据模型,并将数据膨胀到我的 ListView行。

首先,我将创建自定义行的 XML。你可以看到下面的代码。

item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test text"
android:id="@+id/tv"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"/>

</RelativeLayout>

这里我创建了一个显示文本的行。

现在,我将创建自定义适配器来处理此 XML。如下所示。

MyAdapter.java

public class MyAdapter extends BaseAdapter {

private static final String LOG_TAG = MyAdapter.class.getSimpleName();

private Context context_;
private ArrayList<String> items;

public MyAdapter(Context context, ArrayList<String> items) {
this.context_ = context;
this.items = items;
}

@Override
public int getCount() {
return items.size();
}

@Override
public Object getItem(int position) {
return items.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context_.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

convertView = mInflater.inflate(R.layout.item_mail, null);
}

TextView tv = (TextView) convertView.findViewById(R.id.tv);

String text = items.get(position);

Log.d(LOG_TAG,"Text: " + text);

tv.setText(text);

return convertView;
}
}

好的。现在我们拥有一切来完成这项工作。在你的Activity类,做这样的事情:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<TextView
android:text="@string/hello_world"
android:id="@+id/tv_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tv_header">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add item"
android:id="@+id/button"
android:layout_gravity="center" />

<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView" />
</LinearLayout>

</RelativeLayout>

MainActivity.java

public class MainActivity extends ActionBarActivity {

private int numItem = 1; // Dummy int to create my items with different numbers.

private MyAdapter myAdapter; // Your custom adapter.

private ArrayList<String> items; // This is going to be your data structure, every time you change it, call the notifyDataSetChanged() method.

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button bt = (Button) findViewById(R.id.button);
ListView lv = (ListView) findViewById(R.id.listView);
items = new ArrayList<>();
myAdapter = new MyAdapter(this,items);
lv.setAdapter(myAdapter);

bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addItem(); // The method I'm using to insert the item. Look for it below.
}
});
}

private void addItem() {
items.add("Text " + numItem++);

mailAdapter.notifyDataSetChanged(); // Notifying the adapter that my ArrayList was modified.
}
}

这应该可以解决问题。


根据你告诉我的,你想使用 String数组而不是 ArrayList<String> .那么,将适配器更改为以下内容。

MyAdapter.java

public class MyAdapter extends BaseAdapter {

private static final String LOG_TAG = MyAdapter.class.getSimpleName();

private Context context_;
private String[] items;

public MyAdapter(Context context, String[] items) {
this.context_ = context;
this.items = items;
}

@Override
public int getCount() {
return items.length;
}

@Override
public Object getItem(int position) {
return items[position];
}

@Override
public long getItemId(int position) {
return position;
}

// Rest of the code... Same as before.
}

MainActivity.java

public class MainActivity extends ActionBarActivity {

private MyAdapter myAdapter; // Your custom adapter.

private String[] items;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button bt = (Button) findViewById(R.id.button);
ListView lv = (ListView) findViewById(R.id.listView);
items = {"Whatever","String","You","Like"};
myAdapter = new MyAdapter(this,items);
lv.setAdapter(myAdapter);
}
}

这种方法的问题:您的适配器将具有固定大小,一旦您创建它,它就是您的字符串数组的大小。除非您创建另一个具有不同 String 的适配器,否则您将无法将其变大。数组。

This question讨论这个问题。

关于android - 带有自定义适配器的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681186/

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