【问题标题】:How do I duplicate "new TextView" and "setId"?如何复制“new TextView”和“setId”?
【发布时间】:2013-06-11 11:19:03
【问题描述】:

我的 FragmentActivity 循环并创建了许多 Fragment,每个 Fragment 都带有 `new TextView.经过一些帮助,我有这个:

FragmentActivity.java

    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        for (int j=0; j<positionsCount; j++) {
            ...
            mTabsAdapter = new PositionFragmentAdapter(this, mViewPager);
            mTabsAdapter.addTab(bar.newTab().setText("My Tab Name"), Fragment.class, args);
        }
    }

片段.java

public class Fragment extends Fragment {

    private static int id = 0;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        LinearLayout mLinearLayout = new LinearLayout(getActivity());
        TextView mTextView = new TextView(getActivity());
        mTextView.setId(id);
        id++;
        mLinearLayout.addView(mTextView);

        return mLinearLayout;
    }

    @Override
    public void onStart() {
        super.onStart();
        Bundle args = getArguments();
        id.setText(args.get("posName").toString()); // ERROR HERE: "Cannot invoke setText(String) from primitive type int"
    }
}

如何停止错误?

编辑 2:

06-11 12:54:53.843: E/AndroidRuntime(21005): java.lang.NullPointerException
06-11 12:54:53.843: E/AndroidRuntime(21005):    at com.example.guide.Fragment.onStart(Fragment.java:33)
06-11 12:54:53.843: E/AndroidRuntime(21005):    at android.support.v4.app.Fragment.performStart(Fragment.java:1484)
...

【问题讨论】:

    标签: android for-loop int fragment


    【解决方案1】:

    您在整数上调用 setText,而不是 TextView。而不是这个

    id.setText(args.get("posName").toString());
    

    这样做:

    mTextView.setText(args.get("posName").toString());
    

    请注意,您必须将 TextView 设为 Fragment 的实例变量,以便可以从其他方法访问它。

    public class Fragment extends Fragment {
        TextView mTextView;
    

    【讨论】:

    • 好的,这修复了错误。但是所有选项卡中的文本仍然会立即更改:(
    • 啊,我明白了 - 我认为与其将 TextView 设置为实例变量,不如在 onStart 方法中使用 findViewById(id) 重新实例化它。
    • 好的,所以我将行更改为:TextView tv = (TextView) getActivity().findViewById(id);,当我运行它时,应用程序崩溃了。它在第 32 行显示错误,即:tv.setText(args.get("posName").toString());
    • 嗯...尝试将id++ 部分移动到setId 部分之前,这可能会解决它
    • 是的,修复了它:),但是所有片段中的文本仍在更新:(这可能是因为 FragmentAdapter 内部的某些东西吗?
    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2018-03-13
    • 1970-01-01
    • 2018-02-06
    • 2011-03-30
    相关资源
    最近更新 更多