【问题标题】:Android inflate view multiple time with custom ViewAndroid使用自定义视图多次膨胀视图
【发布时间】:2015-11-03 10:13:16
【问题描述】:

我创建了一个自定义类来快速创建 View 对象(基本上它只是一个显示的问题)。示例:

标题:天气

留言:今天天气怎么样?

所以这是我扩展 View 的自定义类:

public class Question extends View {

    Context mContext;

    public Question(Context context) {
        super(context);
        mContext = context;
    }

    public void addQuestion (View rootView, String title, String message) {

        // Inflate une question
        LinearLayout rootQuestion = (LinearLayout) rootView.findViewById(R.id.activity_formulaire_questions_preliminaires_ll_wrapper);
        LayoutInflater questionInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout myQuestion = (LinearLayout) questionInflater.inflate(R.layout.activity_formulaire_question, rootQuestion);

        // Assigne la vue au controlleur
        TextView tvTitle = (TextView) myQuestion.findViewById(R.id.activity_formulaire_question_title);
        TextView tvMessage = (TextView) myQuestion.findViewById(R.id.activity_formulaire_question_message);

        // Remplissage des champs textes
        tvTitle.setText(title);
        tvMessage.setText(message);
    }

还有我的片段:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.activity_formulaire_questions_preliminaires, null);

        Question question = new Question(super.getActivity());
        question.addQuestion(rootView, "Question 1 Title", "1");
        question.addQuestion(rootView, "Question 2 Title", "2");
        question.addQuestion(rootView, "Question 3 Title", "3");
        question.addQuestion(rootView, "Question 4 Title", "4");

        return rootView;
    }

但是在启动片段时,它只是正确显示的最后一个问题。

-> 问题 4 标题

-> 4

-> 默认标题

-> -1

-> 默认标题

-> -1

-> 默认标题

-> -1

为什么?我虽然在使用 questionInflater.inflate 时会得到一个新视图,并尊重层次结构“视图 -> 视图组 -> 线性布局”

【问题讨论】:

    标签: android android-fragments layout-inflater android-inflate


    【解决方案1】:

    您可以通过多种方式解决此问题。 例如,在这种情况下,您实际上不需要扩展 View。

    这样的事情应该可以工作:

     public class QuestionHelper {
         Context mContext;
    
         public QuestionHelper(Context context) {
             mContext = context;
         }
    
         public void addQuestion(ViewGroup rootView, String title, String message) {
             // Inflate une question
             LayoutInflater questionInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             LinearLayout myQuestion = (LinearLayout) questionInflater.inflate(R.layout.activity_formulaire_question, null, false);
    
             // Assigne la vue au controlleur
             TextView tvTitle = (TextView) myQuestion.findViewById(R.id.activity_formulaire_question_title);
             TextView tvMessage = (TextView) myQuestion.findViewById(R.id.activity_formulaire_question_message);
    
             // Remplissage des champs textes
             tvTitle.setText(title);
             tvMessage.setText(message);
    
             rootView.addView(myQuestion);
         }
    }
    

    在你的片段上:

    QuestionHelper questionHelper = new QuestionHelper(this);
    questionHelper.addQuestion(rootView, "Question 1 Title", "1");
    questionHelper.addQuestion(rootView, "Question 2 Title", "2");
    questionHelper.addQuestion(rootView, "Question 3 Title", "3");
    questionHelper.addQuestion(rootView, "Question 4 Title", "4");
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多