ListFragment为每个列表项显示多个数据?

时间:2013-05-14 22:43:25

标签: android android-arrayadapter android-listfragment

我正在使用ListFragment来显示从REST调用返回的搜索结果。 ListFragment仅显示单个数据(名称),但我希望它显示列表中每个项目的多个部分 - 地址,电话号码,评级。我已经在SO上搜索了一大堆,并通过谷歌搜集了一些关于如何实现这一目标的任何指导。我希望有人能指出我正确的方向。

这是显示ListFragment的活动:

public class ResultsActivity extends FragmentActivity implements ListFragmentClickable.OnItemSelectedListener{

private ArrayAdapter<String> mAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_results);
    setupActionBar();

    Intent intent = getIntent();
    String searchTerm = intent.getStringExtra(MainActivity.SEARCH_TERM);

    mAdapter = new ArrayAdapter<String>(this, R.layout.item_label_list);

    FragmentManager     fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    ListFragmentClickable list = new ListFragmentClickable();
    ft.add(R.id.fragment_content, list);

    list.setListAdapter(mAdapter);

    FactualResponderFragment responder = (FactualResponderFragment) fm.findFragmentByTag("RESTResponder");
    if (responder == null) {
        responder = new FactualResponderFragment();            
        ft.add(responder, "RESTResponder");
    }

    Bundle bundle = new Bundle();
    bundle.putString("search_term", searchTerm);
    responder.setArguments(bundle);

    ft.commit();
}

public ArrayAdapter<String> getArrayAdapter() {
    return mAdapter;
}

还有一些其他方法,但它们并不相关。以下是FactualResponderFragment中的方法,其中项目实际上已添加到ArrayAdapter中:

private void setResults() { 
    ResultsActivity activity = (ResultsActivity) getActivity();

    searchThis = getArguments().getString("search_term");

    if (mResults == null && activity != null) {
        Intent intent = new Intent(activity, RESTService.class);
        intent.setData(Uri.parse("http://search.twitter.com/search.json"));

        Bundle params = new Bundle();
        params.putString("q", searchThis);

        intent.putExtra(RESTService.EXTRA_PARAMS, params);
        intent.putExtra(RESTService.EXTRA_RESULT_RECEIVER, getResultReceiver());

        activity.startService(intent);
    } else if (activity != null) {

        ArrayAdapter<String> adapter = activity.getArrayAdapter();
        adapter.clear();

        for (String result : mResults) {    
             adapter.add(result);
        }            
    }
}

由于ResultsActivity几乎完全由Java构建,因此XML很简短:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

这里是item_label_list.xml,它也在Java中引用:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="20dp" />

我可以只修改item_label_list的XML,为每个列表项显示的每条数据添加下一个TextView,然后在XML中创建每个列表条目的视图吗?如果是这种情况,我该如何设置每个TextView的值?我是否需要编写处理多个数据的自定义适配器?

非常感谢任何帮助或指导。如果我可以传递任何其他代码段,请告诉我。谢谢!

0 个答案:

没有答案