1

我正在使用 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 的值?我是否需要编写一个处理多条数据的自定义适配器?

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

4

0 回答 0