Android 文本视图不显示结果

Android 文本视图不显示结果,android,barcode,zxing,barcode-scanner,Android,Barcode,Zxing,Barcode Scanner,我正在做这个应用程序,它扫描条形码并显示结果。目前,扫描条形码后,TexView没有显示任何内容,你们能帮我吗 下面是MainActivity.java public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; @Override prote

我正在做这个应用程序,它扫描条形码并显示结果。目前,扫描条形码后,
TexView
没有显示任何内容,你们能帮我吗

下面是
MainActivity.java

public class MainActivity extends AppCompatActivity {
    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scrollable_tabs);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new OneFragment(), "ONE");
        adapter.addFrag(new TwoFragment(), "TWO");
        adapter.addFrag(new ThreeFragment(), "THREE");
        adapter.addFrag(new FourFragment(), "FOUR");
        adapter.addFrag(new FiveFragment(), "FIVE");
        adapter.addFrag(new SixFragment(), "SIX");
        adapter.addFrag(new SevenFragment(), "SEVEN");
        adapter.addFrag(new EightFragment(), "EIGHT");
        adapter.addFrag(new NineFragment(), "NINE");
        adapter.addFrag(new TenFragment(), "TEN");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}
和xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <Button android:id="@+id/scan_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="scan" />

    <TextView
        android:id="@+id/barcodeResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Start scanning by pressing the FAB!"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

确保
活动中的
OnActivityResult
正在调用
super.OnActivityResult()
。这应该确保它也在
片段上被调用

或者

尝试此包装类:而不是
IntentIntegrator

import android.content.Intent;
import android.support.v4.app.Fragment;

import com.google.zxing.integration.android.IntentIntegrator;

public final class FragmentIntentIntegrator extends IntentIntegrator {

    private final Fragment fragment;

    public FragmentIntentIntegrator(Fragment fragment) {
        super(fragment.getActivity());
        this.fragment = fragment;
    }

    @Override
    protected void startActivityForResult(Intent intent, int code) {
        fragment.startActivityForResult(intent, code);
    }
}
它确保调用activityResult
上的
片段

在你的一个片段中呼唤它

FragmentIntentIntegrator integrator = new FragmentIntentIntegrator (this);
或者

看到这个了吗


它显示了详细的实现

确保
活动中的
OnActivityResult
正在调用
super.OnActivityResult()
。这应该确保它也在
片段上被调用

或者

尝试此包装类:而不是
IntentIntegrator

import android.content.Intent;
import android.support.v4.app.Fragment;

import com.google.zxing.integration.android.IntentIntegrator;

public final class FragmentIntentIntegrator extends IntentIntegrator {

    private final Fragment fragment;

    public FragmentIntentIntegrator(Fragment fragment) {
        super(fragment.getActivity());
        this.fragment = fragment;
    }

    @Override
    protected void startActivityForResult(Intent intent, int code) {
        fragment.startActivityForResult(intent, code);
    }
}
它确保调用activityResult
上的
片段

在你的一个片段中呼唤它

FragmentIntentIntegrator integrator = new FragmentIntentIntegrator (this);
或者

看到这个了吗


它显示了详细的实现

当从另一个活动返回时,系统可能试图恢复视图状态,实际上覆盖了您刚才编写的内容

将结果保存到成员中,并尝试覆盖片段中的onViewStateRestored

    @Override
    public void onViewStateRestored(Bundle savedInstanceState){
     super.onViewStateRestored(savedInstanceState);
     if( barcode != null ){
         barcode.setText(mResult);
     }
    }

当从另一个活动返回时,系统可能会尝试恢复视图状态,实际上会覆盖您刚刚编写的内容

将结果保存到成员中,并尝试覆盖片段中的onViewStateRestored

    @Override
    public void onViewStateRestored(Bundle savedInstanceState){
     super.onViewStateRestored(savedInstanceState);
     if( barcode != null ){
         barcode.setText(mResult);
     }
    }

很抱歉我迟到了,但这是因为我在编译您的项目时遇到了太多错误,而且您在Github上传项目也更容易

无论如何,您使用扫描仪的方式根本没有输入
onActivityResult()
方法,因此我将其重新创建为 当然还有你的定制

这是你的代码,我已经测试过了,它肯定能工作,你只需要复制和粘贴它

package info.androidhive.materialtabs.fragments;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import info.androidhive.materialtabs.R;


public class OneFragment extends Fragment{
public OneFragment() {
    // Required empty public constructor
}

private String toast;
Button scan_btn;
TextView barcode;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    scan_btn = (Button) view.findViewById(R.id.scan_button);
    barcode = (TextView)view.findViewById(R.id.barcodeResult);
    scan_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            scanFromFragment();
        }
    });
    return view;
}

public void scanFromFragment() {
    IntentIntegrator.forSupportFragment(this)
            .setDesiredBarcodeFormats(IntentIntegrator.PRODUCT_CODE_TYPES)
            .setPrompt("Scan")
            .setCameraId(0)
            .setBeepEnabled(false)
            .setBarcodeImageEnabled(true)
            .initiateScan();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            toast = "Cancelled from fragment";
        } else {
            barcode.setText(result.getContents());
            toast = "Scanned from fragment: " + result.getContents();
        }

        // At this point we may or may not have a reference to the activity
        displayToast();
    }
}

private void displayToast() {
    if(getActivity() != null && toast != null) {
        Toast.makeText(getActivity(), toast, Toast.LENGTH_LONG).show();
        toast = null;
    }
}
}

还可以在
fragment\u one
layout
android:layout\u lower=“@+id/scan\u按钮”
中添加到您的
barcodesult
,因为它就在扫描按钮的后面

很抱歉迟到了,但这是因为我在编译您的项目时遇到了太多错误,您也可以更容易地在Github上传它

无论如何,您使用扫描仪的方式根本没有输入
onActivityResult()
方法,因此我将其重新创建为 当然还有你的定制

这是你的代码,我已经测试过了,它肯定能工作,你只需要复制和粘贴它

package info.androidhive.materialtabs.fragments;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import info.androidhive.materialtabs.R;


public class OneFragment extends Fragment{
public OneFragment() {
    // Required empty public constructor
}

private String toast;
Button scan_btn;
TextView barcode;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    scan_btn = (Button) view.findViewById(R.id.scan_button);
    barcode = (TextView)view.findViewById(R.id.barcodeResult);
    scan_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            scanFromFragment();
        }
    });
    return view;
}

public void scanFromFragment() {
    IntentIntegrator.forSupportFragment(this)
            .setDesiredBarcodeFormats(IntentIntegrator.PRODUCT_CODE_TYPES)
            .setPrompt("Scan")
            .setCameraId(0)
            .setBeepEnabled(false)
            .setBarcodeImageEnabled(true)
            .initiateScan();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            toast = "Cancelled from fragment";
        } else {
            barcode.setText(result.getContents());
            toast = "Scanned from fragment: " + result.getContents();
        }

        // At this point we may or may not have a reference to the activity
        displayToast();
    }
}

private void displayToast() {
    if(getActivity() != null && toast != null) {
        Toast.makeText(getActivity(), toast, Toast.LENGTH_LONG).show();
        toast = null;
    }
}
}


还可以在
fragment\u one
layout
android:layout\u下方=“@+id/scan\u按钮”
中添加到您的
barcodeResult
,因为它就在扫描按钮的后面

文本视图显示的内容,它是否给了你一个错误?也许活动结果应该在活动上而不是片段?活动或片段没有意义函数必须同时工作Nope没有错误只是给空i thinknope没有错误只是给空i thinkView显示什么,它是否给了你一个错误?也许活动结果应该在活动上,而不是片段?活动或片段没有意义函数必须同时工作Nope没有错误只是给空i thinknope没有错误只是给空i thinknope没有错误我认为对于super.onactivityresult,如何将其放入代码中。抱歉,我是java和Android的新手。对于super.onactivityresult,您如何将其放入代码中。抱歉,我是java新手,androidput在我的片段代码中?很抱歉,你能提供一个例子吗?因为我是新来的,学习很努力。如果你的onActivityResult没有被调用,那么这是你必须考虑的第一个问题。我的代码只是防止片段视图(您的文本视图)重置为以前的值,但如果未调用onActivityResult,我的代码将不会执行任何特殊操作。是否将其放在我的片段代码中?很抱歉,你能提供一个例子吗?因为我是新来的,学习很努力。如果你的onActivityResult没有被调用,那么这是你必须考虑的第一个问题。“我的代码”只是防止片段视图(您的文本视图)重置为以前的值,但如果未调用onActivityResult,我的代码将不会执行任何特殊操作。@Jason欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看页面,并@Jason欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请参阅本页,并