1

ListFragment を使用して、REST 呼び出しから返された検索結果を表示しています。ListFragment には 1 つのデータ (名前) しか表示されませんが、リスト内の項目 (住所、電話番号、評価) ごとに複数の部分を表示したいと考えています。私はSOとGoogle経由でたくさん検索しましたが、それを実現する方法についてのガイダンスを実際に見つけることができませんでした. 誰かが私を正しい方向に向けてくれることを願っています。

これは、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;
}

他にもいくつかの方法がありますが、それらは適切ではありません。項目が実際に ArrayAdapter に追加される FactualResponderFragment のメソッドを次に示します。

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