2

私は現在、Android で基本的なニュース アグリゲーション アプリを開発中です。そこには多くの負荷があることを知っていますが、Android 開発を始めたばかりの人にとっては、始めるのに適した場所だと思うので、基本的に作成しているだけです。

私の目標は、複数のフィードから記事を表示することです。各フィードには、パルス ニュース アプリのような独自の横方向のスライド リストがあります。これまでのところ、「Horizo​​ntalListView」の作成に関するチュートリアルを見つけることができました。現在、以下のような基本的な水平スライド リストビューをアプリに表示しています。

スクリーンショットのリンク: http://www.dev-smart.com/wp-content/uploads/2011/03/device-200x300.png

Pulse アプリのスクリーンショット: http://a1525.phobos.apple.com/us/r1000/080/Purple/v4/ba/6a/01/ba6a01d1-f0b7-4bb7-3f94-5a5761653e3c/mzl.zxnjzzmk.480x480-75. jpg

コード:

public class HorizontalListViewDemo extends Activity {

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

    setContentView(R.layout.listviewdemo);

    HorizontalListView listview = (HorizontalListView) findViewById(R.id.listview);
    listview.setAdapter(mAdapter);


}

private static String[] dataObjects = new String[]{ "Text #1",
    "Text #2",
    "Text #3", "Text #4"  }; 

private BaseAdapter mAdapter = new BaseAdapter() {

    private OnClickListener mOnButtonClicked = new OnClickListener() {

        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(HorizontalListViewDemo.this);
            builder.setMessage("hello from " + v);
            builder.setPositiveButton("Cool", null);
            builder.show(); 
        }
    };

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View retval = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewitem, null);
        TextView title = (TextView) retval.findViewById(R.id.title);
        Button button = (Button) retval.findViewById(R.id.clickbutton);
        button.setOnClickListener(mOnButtonClicked);
        title.setText(dataObjects[position]);
        return retval;
    }   
};
}

XML:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="#000"
  >

  <com.devsmart.android.ui.HorizontalListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="250dp"
    android:background="#ddd"
  />

</LinearLayout>
</ScrollView>

前述したように、各 Horizo​​ntalListView は 1 つのフィードを表し、上記のように関連する記事を表示します。したがって、この開発の次のステップは、ユーザーがアプリ内からフィードを宣言できるように、これらの Horizo​​ntalListView の動的な作成を試みることです。これにより、既に定義されているものの下に動的に作成されます。

そのプロセスに関連する他のすべての努力を無視して、既に定義されている XML リストビュー レイアウト id="listview" を再利用できる新しい Horizo​​ntalListView を作成するための支援を求めているだけです。すべてのフィードを事前に定義し、一意の ID を持つ一意の XML レイアウトを作成すれば、これを機能させることができることはわかっていますが、既存のレイアウトを再利用する新しい Horizo​​ntalListView を定義する方法はあるのでしょうか。

皆さんが私のためにこれについていくつかの光を当てることができることを願っています.

ありがとう

更新 1: ビューを使用していますか?

//Defining main XML file "listviewdemo.xml"
setContentView(R.layout.listviewdemo);
//Creating a new view to apply to my HorizontalListViews, /res/layout/listviewStyle.xml
View view = getLayoutInflater().inflate(R.layout.listviewStyle, null);

//Defining my first HorizontalListView      
HorizontalListView listview = (HorizontalListView) view.findViewById(R.id.listviewReuse);
listview.setAdapter(mAdapter);
4

1 に答える 1

1
HorizontalListView listview = (HorizontalListView) findViewById(R.id.listview);

この行は常に、R.id.listview で見つかった最初のビューを返します。複数のリストビューがある場合はあまり良くありません。

Activity.findViewById() を呼び出す代わりに、サブビューで findViewById() を呼び出します。レイアウト内に各リストビューを含めることができます。次に、findViewById を呼び出して、リストビューの親であるレイアウトを見つけます。レイアウトでの呼び出し findViewById。

最初に listView を見つけたら、後で使用できるように覚えておいてください。

投稿した更新されたコードで、この行を削除します。このビューはレイアウトR.layout.listviewdemoの一部ではないため、何もしていません。

View view = getLayoutInflater().inflate(R.layout.listviewStyle, null);

次に、R.layout.listviewdemo の xml で、両方のリストビューを同じ .xml に追加します (それが目標であると仮定します)。いずれにせよ、すべてのビューを同じレイアウトに追加してから、 を使用してビューを取得する必要がありますfindViewById

于 2013-01-27T23:40:09.923 に答える