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
layoutandroid: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
layoutandroid: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欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请参阅本页,并