ちょうどあなたのポイントに答えるため
ありがとう:
あなたはdimens.xml
ファイルに設定された寸法を使用して、デバイスのDPI設定(xhdip、xxhdip、に基づいてこれを上書きxx ...など)。特定の画面幅を指定することでオーバーライドすることもできます。マージンとパディングを考慮して、使用可能なスペースを3で割り、それはあなたの幅です。
あなたがしたいことは、ScrollViewよりも水平スクロールListViewを使用するほうがよく聞こえますが、どちらも達成できます。 ScrollViewを使用している場合は、各Viewタイプを手動でrootViewに追加するだけです。
レイアウトごとに異なるフラグメントを作成する必要はありません。コンストラクタでレイアウトファイルを渡すフラグメントクラスを作成できます。また、ViewHolderパターンを使用して、フラグメント/レイアウトの関係を簡素化する必要があります。そうすれば、少量のロジックで、数十の異なるレイアウトを処理する1つのフラグメントを持つことができます。
ビューホルダーはパブリックメソッド/プロパティーを持つ単なるPOJOクラスです。 - あなたのビューホルダーがしっかりある
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
myViewHolder.myTextView.setText("Hello World!");
...
}
しかし、ここで問題がある:例:それバインド
public class MyViewHolder {
public TextView myTextView;
public MyViewHolder(View rootView) {
myTextView = (TextView) rootView.findViewById(R.id.whatever);
}
}
そして、あなた使用:これは以下のように
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.layout_file, container, false);
view.setTag(myViewHolder);
return view;
}
は、その後、あなたはビューを設定しますフラグメント&ビューホルダーとの関係1:あなたがパブリックプロパティを公開しましたので、フラグメントに結合され、そのため、あなたは1を作成する必要があります。
代わりに、あなたは関係を切り離す必要がありますし、フラグメントの延長としてそれを使用して、ビューホルダー内部のロジックが含まれています。
public interface SomeGenericViewHolder {
void doSomething();
}
インターフェイスはオプションですが、この場合、含まれるデータにアクセスする契約が強制されるため、このインターフェイスを使用する必要があります。
public class MyViewHolder implements SomeGenericViewHolder {
protected TextView myTextView;
public MyViewHolder(View rootView) {
myTextView = (TextView) rootView.findViewById(R.id.whatever);
}
@Override
public void doSomething() {
myTextView.setText("Hello World!");
}
その後、あなたのフラグメントを構築する:
MyFragment fragment = new MyFragment(myViewHolder);
おかげで、これは便利です。レイアウトファイルをコンストラクタのフラグメントに渡すと、フラグメントにはデフォルトのコンストラクタしかないはずだと思いましたか? – dco123
彼らはあなたが基本的なシステムではない自動的に、自分でインスタンス化しているので、する必要はありません。フラグメントをインスタンス化しないと、意図とは異なる、アクティビティとは異なり、フラグメントは存在しません。 –